拥有此DataFrame:
import pandas
dates = pandas.date_range('2016-01-01', periods=5, freq='H')
s = pandas.Series([0, 1, 2, 3, 4], index=dates)
df = pandas.DataFrame([(1, 2, s, 8)], columns=['a', 'b', 'foo', 'bar'])
df.set_index(['a', 'b'], inplace=True)
df
Run Code Online (Sandbox Code Playgroud)
我想用一个新的系列取代系列,这个系列只是旧系列,但重新采样到一天(即x.resample('D').sum().dropna()).
当我尝试:
df['foo'][0] = df['foo'][0].resample('D').sum().dropna()
Run Code Online (Sandbox Code Playgroud)
这看起来效果很好:
但是,我收到警告:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
Run Code Online (Sandbox Code Playgroud)
问题是,我应该怎么做呢?
我尝试但不起作用的事情(重新取样或不重新分配引起异常):
df.iloc[0].loc['foo'] = df.iloc[0].loc['foo']
df.loc[(1, 2), 'foo'] = df.loc[(1, 2), 'foo']
df.loc[df.index[0], 'foo'] = df.loc[df.index[0], 'foo']
Run Code Online (Sandbox Code Playgroud)
有关数据的更多信息(如果相关):
使用Python 3.5.1和Pandas 0.18.1.
这应该有效:
df.iat[0, df.columns.get_loc('foo')] = df['foo'][0].resample('D').sum().dropna()
Run Code Online (Sandbox Code Playgroud)
Pandas 抱怨链式索引,但是当你不这样做时,它会面临将整个系列分配给单元格的问题。有了iat你就可以强迫这样的事情。我认为这不是一个更好的事情,但似乎是一个可行的解决方案。
| 归档时间: |
|
| 查看次数: |
1415 次 |
| 最近记录: |