我继承了一些非常混乱的遗留代码,这些代码调用Google Analytics API并将一些指标保存到pandas数据帧中。
有一个date
列是一个字符串,我想转换为日期。我通常会使用pd.to_datetime,就像这样final['date'] = pd.to_datetime(final['date'], format='%Y%m%d', errors='coerce')
但它给了我这个错误:
AttributeError: 'tuple' object has no attribute 'lower'
这是数据帧的说明:
print(final.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 37047 entries, 0 to 37046
Data columns (total 5 columns):
(date,) 37047 non-null object
(landingPagePath,) 37047 non-null object
(sessions,) 37047 non-null object
(bounces,) 37047 non-null object
(market,) 37047 non-null object
dtypes: object(5)
memory usage: 1.4+ MB
None
我在这里发现了一个类似的SO问题,如果我这样做,解决方案就会起作用
final['date'] = pd.to_datetime([x for x in final['date'].squeeze().tolist()], dayfirst=True)
.
但是,我仍然不明白首先是什么导致了这个问题。我猜该列在某种程度上不一致,但我不知道如何确定哪一行是罪魁祸首。找出答案的最佳方法是什么?
就像我非常相似的情况一样,请检查type(final['date'])
。pd.to_datetime()
主要适用于pd.Series
。
这甚至可以解释为什么squeeze()
有效。它将DataFrame
转换为Series
。