Pandas Lambda功能:属性错误'发生在索引0'

时间:2015-10-14 09:00:39

标签: python pandas lambda

我正在使用Pandas在从csv创建的数据框中创建新列。

[in] DfT_raw = pd.read_csv('./file.csv', index_col = False)
[in] print(DfT_raw)

[out]            Region Name dCount ONS    CP  S Ref E  S Ref N   Road  \
0        East Midlands  E06000015      14/04/00 00:00  37288   434400   336000   A516   
1        East Midlands  E06000015       14/04/00 00:00  37288   434400   336000   A516   
2        East Midlands  E06000015       14/04/00 00:00  37288   434400   336000   A516   
3        East Midlands  E06000015       14/04/00 00:00  37288   434400   336000   A516   

我定义了一个函数来从日期时间字段(dCount)中删除时间,然后创建一个新列' date'

[in] def date_convert(dCount):
         return dCount.date()

     DfT_raw['date'] = DfT_raw.apply(lambda row: date_convert(row['dCount']), axis=1)

[out] AttributeError: ("'str' object has no attribute 'date'", u'occurred at index 0')

index_col存在一些问题。我之前使用过index_col = 1,但得到了同样的错误。

当我打印' dCount'我得到了

0          14/04/00 00:00
1          14/04/00 00:00
2          14/04/00 00:00
3          14/04/00 00:00
4          14/04/00 00:00

索引列导致错误。我如何确保没有给予该功能?

1 个答案:

答案 0 :(得分:3)

您的错误是,您的日期为str而不是datetime,使用to_datetime进行转换:

df['dCount'] = pd.to_datetime(df['dCount'])

或者更好的方法是告诉read_csv将该列解析为datetime:

DfT_raw = pd.read_csv('./file.csv', parse_dates=['dCount'],index_col = False)

然后,您可以通过调用dt.date访问者

来获取日期