【问题标题】:Pandas: Creating new data frame from only certain columns熊猫:仅从某些列创建新数据框
【发布时间】:2016-07-30 19:19:06
【问题描述】:

我有一个包含测量值的 csv 文件,我想创建一个包含每小时平均值和标准偏差的新 csv 文件。但仅适用于某些列。

例子:

csv1:

YY-MO-DD HH-MI-SS_SSS    |     Acceleration  |        Lumx     |    Pressure
2015-12-07 20:51:06:608  |        22.7       |        32.3     |     10
2015-12-07 20:51:07:609  |        22.5       |        47.7     |     15

转csv 2(仅用于压力和加速度:

 YY-MO-DD HH-MI-SS_SSS       | Acceleration avg  |   Pressure avg
    2015-12-07 20:00:00:000  |        22.6       |        12.5     
    2015-12-07 21:00:00:000  |        ....       |        ....    

现在我对如何计算平均值有了一个想法(感谢本网站上的人) - 但我在创建一个包含几列计算的新的较小数据框时遇到了麻烦。

谢谢!!!

【问题讨论】:

    标签: python csv pandas


    【解决方案1】:

    您可以制作一个更小的 DataFrame,如下所示:

    csv2 = csv1[['Acceleration', 'Pressure']].copy()
    

    然后你可以处理csv2,它只有你想要的列。 (您说您对平均计算有所了解。)
    仅供参考,如果您确定 view versus copy,则可以省略 .copy()。

    【讨论】:

    • 但如何在计算后直接从数据框中复制?
    • @RonMaor 你可以像csv2=pd.DataFrame(); csv2['Acceleration Avg'] = csv1[['Acceleration', 'Pressure']].copy().apply(your_function)这样分配结果。
    【解决方案2】:
    csv2 = csv1.loc[:, ['Acceleration', 'Pressure']]
    
    • .loc[] 有助于保持子集操作的明确和一致。

    • .loc[] 总是返回一个副本,因此原始数据帧永远不会被修改。

    (有关不同view vs. copy 替代方案的进一步讨论和出色示例,请参阅:Pandas: Knowing when an operation affects the original dataframe)

    【讨论】:

    • 我也使用这种风格,但选择的答案也可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 2016-08-07
    • 1970-01-01
    相关资源
    最近更新 更多