pandas DataFrame DatetimeIndex 切片错误
pandas DataFrame DatetimeIndex slice error
很好奇为什么我可以给一个slice赋值,但是不能直接打印出来。以下代码显示详细信息:
import pandas as pd
import numpy as np
from datetime import datetime
dt_start = datetime.strptime("20171010", "%Y%m%d")
dt_end = datetime.strptime("20171020", "%Y%m%d")
df = pd.DataFrame(np.nan, index=pd.date_range(start=dt_start, end=dt_end), columns=['sales', 'account'])
df.loc[:1, 'sales'] = 100 # works well
print(df.loc[:1, 'sales']) # error, why???
错误信息:
类型错误:无法使用 class 'int'
的这些索引器 [1] 在 class 'pandas.tseries.index.DatetimeIndex 上进行切片索引
为什么我可以赋值但不能打印这个切片?
非常感谢您的检查。
我认为首先看起来像错误:
df.loc[:1, 'sales'] = 100
我认为最好也使用 iloc
if need seelct by position - but need get_loc
作为列 sales
的位置:
df.iloc[:1, df.columns.get_loc('sales')] = 100
print (df)
sales account
2017-10-10 100.0 NaN
2017-10-11 NaN NaN
2017-10-12 NaN NaN
2017-10-13 NaN NaN
2017-10-14 NaN NaN
2017-10-15 NaN NaN
2017-10-16 NaN NaN
2017-10-17 NaN NaN
2017-10-18 NaN NaN
2017-10-19 NaN NaN
2017-10-20 NaN NaN
print (df.iloc[:1, df.columns.get_loc('sales')])
2017-10-10 NaN
Freq: D, Name: sales, dtype: float64
print (df.columns.get_loc('sales'))
0
很好奇为什么我可以给一个slice赋值,但是不能直接打印出来。以下代码显示详细信息:
import pandas as pd
import numpy as np
from datetime import datetime
dt_start = datetime.strptime("20171010", "%Y%m%d")
dt_end = datetime.strptime("20171020", "%Y%m%d")
df = pd.DataFrame(np.nan, index=pd.date_range(start=dt_start, end=dt_end), columns=['sales', 'account'])
df.loc[:1, 'sales'] = 100 # works well
print(df.loc[:1, 'sales']) # error, why???
错误信息:
类型错误:无法使用 class 'int'
为什么我可以赋值但不能打印这个切片?
非常感谢您的检查。
我认为首先看起来像错误:
df.loc[:1, 'sales'] = 100
我认为最好也使用 iloc
if need seelct by position - but need get_loc
作为列 sales
的位置:
df.iloc[:1, df.columns.get_loc('sales')] = 100
print (df)
sales account
2017-10-10 100.0 NaN
2017-10-11 NaN NaN
2017-10-12 NaN NaN
2017-10-13 NaN NaN
2017-10-14 NaN NaN
2017-10-15 NaN NaN
2017-10-16 NaN NaN
2017-10-17 NaN NaN
2017-10-18 NaN NaN
2017-10-19 NaN NaN
2017-10-20 NaN NaN
print (df.iloc[:1, df.columns.get_loc('sales')])
2017-10-10 NaN
Freq: D, Name: sales, dtype: float64
print (df.columns.get_loc('sales'))
0