如何以正确的格式手动输入包含每日日期的Python数据框架



我想(手动)按照下面的代码在Python中创建一个具有每日日期(在列'date'中)的数据框架。但是代码没有为每日日期提供正确的格式,忽略了日期(所需的格式表示如下)。你能告诉我如何纠正代码,使"日期"列以所需的格式输入吗?提前感谢!

------------------------------------------------------
desired format for date column
2021-03-22    3
2021-04-07    3
2021-04-18    3
2021-05-12    0
------------------------------------------------------
df1 = pd.DataFrame({"date": [2021-3-22, 2021-4-7, 2021-4-18, 2021-5-12],
"x": [3, 3, 3, 0 ]})
df1
date    x
0   1996    3
1   2010    3
2   1999    3
3   2004    0

Python希望将序列2021-3-22中的数字解释为一系列数学运算2021 minus 3 minus 22

如果你想要这个项目被存储为一个类似于日期的字符串,你需要将它们标记为字符串文字数据类型(str),如下所示,用引号封装它们。

import pandas as pd
df1 = pd.DataFrame({"date": ['2021-3-22', '2021-4-7', '2021-4-18', '2021-5-12'],
"x": [3, 3, 3, 0 ]})

日期列的结果,如这里所示,表明日期列包含object数据类型的元素,其中包含pandas中的str。请注意,字符串的创建完全如下所示(2021-3-22而不是2021-03-22)。

0    2021-3-22
1     2021-4-7
2    2021-4-18
3    2021-5-12
Name: date, dtype: object

然而,如果你实际上希望它们存储为datetime对象,以便你可以对它们进行日期时间操作(即确定两个日期之间的天数或按特定的月份或年份过滤),那么你需要将值转换为datetime对象。

df1['date'] = pd.to_datetime(df1['date'])

此转换的结果是Pandasdatetime对象,它支持纳秒级精度(我将其与仅限于微秒级精度的Pythondatetime对象区分)。

0   2021-03-22
1   2021-04-07
2   2021-04-18
3   2021-05-12
Name: date, dtype: datetime64[ns]

请注意,现在显示的结果的格式就像您期望的datetimes一样(2021-03-22而不是2021-3-22)。

您将希望将系列创建为日期时间,并在将其创建为字符串时使用以下代码,更多信息请参阅此处pandas.to_datetime:

df1 = pd.DataFrame({"date": pd.to_datetime(["2021-3-22", "2021-4-7", "2021-4-18", "2021-5-12"]),
"x": [3, 3, 3, 0 ]})

我经常使用pd.read_csv(io.StringIO(text))将表格式数据复制/粘贴到DataFrame中(例如,来自SO问题)。

的例子:

import io
import re
import pandas as pd
def df_read(txt, **kwargs):
txt = 'n'.join([s.strip() for s in txt.splitlines()])
return pd.read_csv(io.StringIO(re.sub(r'  +', 't', txt)), sep='t', **kwargs)

txt = """
date      value
2021-03-22    3
2021-04-07    3
2021-04-18    3
2021-05-12    0
"""
df = df_read(txt, parse_dates=['date'])
>>> df
date  value
0 2021-03-22      3
1 2021-04-07      3
2 2021-04-18      3
3 2021-05-12      0
>>> df.dtypes
date     datetime64[ns]
value             int64
dtype: object

最新更新