【问题标题】:How to update some of the rows from another series in pandas using df.update如何使用 df.update 更新 pandas 中另一个系列的某些行
【发布时间】:2019-03-05 06:28:17
【问题描述】:

我有一个喜欢的 df,

    stamp   value
0   00:00:00    2
1   00:00:00    3
2   01:00:00    5

转换为时间增量

df['stamp']=pd.to_timedelta(df['stamp'])

只切片奇数索引并添加 30 分钟,

odd_df=pd.to_timedelta(df[1::2]['stamp'])+pd.to_timedelta('30 min')
#print(odd_df)
1  00:30:00
Name: stamp, dtype: timedelta64[ns]

现在,用odd_df 更新df,

根据documentation,它应该给出我预期的输出。

预期输出:

df.update(odd_df)
#print(df)
    stamp   value
0   00:00:00    2
1   00:30:00    3
2   01:00:00    5

我得到了什么,

df.update(odd_df)
#print(df)

    stamp   value
0   00:30:00    00:30:00
1   00:30:00    00:30:00
2   00:30:00    00:30:00

请帮忙,这有什么问题。

【问题讨论】:

  • 更新系列df['stamp'].update(odd_df)
  • 但是在文档中,用系列而不是系列更新df,你能解释一下
  • 嗨,bharath,你检查了吗?
  • 更可能是处理时间增量的错误

标签: python pandas dataframe data-analysis


【解决方案1】:

试试这个:

df.loc[1::2, 'stamp'] += pd.to_timedelta('30 min')

这可确保您仅更新 .loc() 函数指定的 DataFrame 中的值,同时保留原始 DataFrame 的其余部分。要进行测试,请运行 df.shape。用上面的方法你会得到(3,2)。

在您的代码中:

odd_df=pd.to_timedelta(df[1::2]['stamp'])+pd.to_timedelta('30 min')

odd_df DataFrame 仅包含原始 DataFrame 的一部分。你切的部分。 odd_df 的形状为 (1,)。

【讨论】:

  • 感谢您的回答,只需查看 df.update 文档,还使用了相同类型的形状 (3,2) 和 (2,),为什么它对我不起作用?跨度>
  • 我已经尝试调试了一下,并将问题缩小到您的原始代码无法正常工作的预感,因为 pd.to_timedelta() 不能很好地与 pd.update() 配合使用。我对您的“值”列做了一些类似的更改(使用相同的切片操作):change_value_df=df[1::2]['value'] + 100 和 pd.update() 可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-14
  • 1970-01-01
相关资源
最近更新 更多