我是一位刚接触Python的旧SAS用户。有几个例子说明为什么会出现这种错误。例如 Here。
我想消除这个错误来源。我正在使用read_cvs阅读器创建的大型数据框。
print(df.size, df.shape, df.ndim)
7202952 (266776, 27) 2
日期和时间是对象:
print(df.Date.dtype)
print(df.Time.dtype)
object
object
所以我将它们转换为datetime:
df['Date'] = pd.to_datetime(df['Date'])
df['Time'] = pd.to_datetime(df['Time'])
将df.Date设为索引:
df.set_index('Date', inplace=True)
放弃na:
df = df.dropna()
print(df.shape)
(266752, 26)
并验证行数少于上面所示的行数:
计算2015年12月25日的事故报告数量:
print(len(df.loc['2015-07-04']))
625
到目前为止很好。现在计算2015年12月25日到2015年12月31日之间的事故报告数量:
print(len(df.loc[['2015-12-25','2015-12-26']]))
返回:
TypeError: 'NoneType' object is not iterable
我已经没有想法,所以我用以下方法检查索引:
print(df.index)
DatetimeIndex(['2015-01-09', '2015-01-09', '2015-02-23', '2015-02-23',
'2015-02-23', '2015-02-11', '2015-02-11', '2015-02-23',
'2015-02-23', '2015-04-18',
...
'2015-08-30', '2015-11-29', '2015-11-29', '2015-11-29',
'2015-07-26', '2015-07-26', '2015-12-31', '2015-07-28',
'2015-07-28', '2015-07-15'],
dtype='datetime64[ns]', name='Date', length=266752, freq=None)
我想了解这个错误的来源是什么。其他想法是:也许排序df.Date会有所帮助,因为日期是无序的'并且每天有多行。
我认为丢掉24行可以解决问题。而且我还假设由于DataFrame不包含任何对象,我不会有任何None对象。
df.get_dtype_counts()
datetime64[ns] 1
int64 25
dtype: int64
我从哪里开始?
答案 0 :(得分:1)
我的数据集出现了同样的错误,但发现当我使用pandas.to_datetime转换我选择的日期时,它有效。这是一些示例代码:
df1 = pd.DataFrame(np.random.randn(6,4), index=pd.date_range(start='2015-01-01', periods=6, freq='D'), columns=list('ABCD'))
len(df1.loc[['2015-01-01', '2015-01-03'],:])
返回错误
len(df1.loc[pd.to_datetime(['2015-01-01', '2015-01-03']),:])
返回2