无法消除' NoneType'对象在DataFrame中不是可迭代的错误

时间:2016-10-14 17:15:24

标签: python dataframe

我是一位刚接触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

我从哪里开始?

1 个答案:

答案 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