我有一个pandas数据帧,它有一个包含字符串的文本列,格式为:
28.08.1958
29.04.1958
01.02.1958
05.03.1958
我想把它解释为日期。数据帧来自于使用beautifulsoup,即我没有从csv中读取它,所以我计划使用pd.to_detime((。偶尔会有非日期条目,所以我添加了errors='gnore'。
df["Date2"] = pd.to_datetime(df["Date"], format='%d.%m.%Y', errors='ignore')
在我看来,这似乎不起作用,因为我使用了后续的排序操作:
df.sort_values(by="Date2", ascending=True)
这确实改变了顺序,但似乎是随机的,而不是日期顺序。我想知道日期之间是否有空白,所以作为预防措施,我使用了
['Date'].str.strip()
但没有改善。
我还试着添加:
inplace=True
到排序值,但这导致整列按日期的天数部分排序,这实际上告诉我没有转换到日期。
总之我认为所有输入字符串都被视为错误并被忽略。这可能意味着参数format='%d.%m.%Y'不对。
EDIT针对到目前为止的评论/答案,我找到了一种方法来诱导一个没有错误的输入数据集。这似乎还可以;Date2";列取决于该列中是否有错误:如果有非日期文本,则该列为对象类型,如果没有错误,则为datetime64[ns]
解决方案我已经设置errors="百分比"在to_datetime语句中。
试试这个:
import pandas as pd
import io
csv_data = '''
Date
28.08.1958
29.04.1958
01.02.1958
05.03.1958
'''
df = pd.read_csv(io.StringIO(csv_data))
df["Date2"] = pd.to_datetime(df["Date"], format='%d.%m.%Y')
df.sort_values(by="Date2", ascending=True, inplace=True)
print(df)
Date Date2
2 01.02.1958 1958-02-01
3 05.03.1958 1958-03-05
1 29.04.1958 1958-04-29
0 28.08.1958 1958-08-28