在我看来,您的代码是正确的。
我在以下环境中尝试过:
import pandas as pd
import io
txt = '''date,amount
05.01.2022,133.15
06.01.2022,222.09'''
df = pd.read_csv(io.StringIO(txt))
现在当你运行df.info() 时,你应该得到:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 date 2 non-null object
1 amount 2 non-null float64
dtypes: float64(1), object(1)
memory usage: 160.0+ bytes
现在你的代码:
df['date'] = pd.to_datetime(df['date'], format='%d.%m.%Y')
(运行没有任何错误)。
df的内容现在是:
date amount
0 2022-01-05 133.15
1 2022-01-06 222.09
注意日期格式的变化。这是 Pandas 打印时间部分设置为 0 的日期的方式。
当你再次运行df.info() 时,你应该得到:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 date 2 non-null datetime64[ns]
1 amount 2 non-null float64
dtypes: datetime64[ns](1), float64(1)
memory usage: 160.0 bytes
注意 date 列的类型现在是 datetime64[ns]。
总结一下:
- 首先运行我的代码来创建 DataFrame。
- 运行
df.info() 并检查结果是否与我输入的相符。
- 在我的数据上运行您的代码并检查结果。
- 按照自己的方式创建 df(使用您的实际数据)。
- 运行
df.info()(在您的 DataFrame 上)并查找任何差异。
- 检查您的 DataFrame data 列中的所有行是否正确包含
格式化的日期。
特别寻找当你有任何其他字符而不是点的情况
(例如逗号)。
还要在 data 列中查找空条目或前导空格。
您的 DataFrame 可能包含您发布的其他内容。