如何以正确的格式手动输入包含每日日期的 Python 数据框
how to enter manually a Python dataframe with daily dates in a correct format
我想(手动)在 Python 中创建一个包含每日日期的数据框(在 'date' 列中),按照以下代码。
但是代码没有为每日日期提供正确的格式,忽略了日期(所需的格式表示如下)。
您能告诉我如何更正代码,以便以所需格式输入 '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'])
此转换的结果是 Pandas datetime
对象,可实现纳秒精度(我将其与限于微秒精度的 Python datetime
对象区分开来)。
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 ]})
FWIW,我经常使用pd.read_csv(io.StringIO(text))
将copy/pastetabular-looking数据转化为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
我想(手动)在 Python 中创建一个包含每日日期的数据框(在 'date' 列中),按照以下代码。 但是代码没有为每日日期提供正确的格式,忽略了日期(所需的格式表示如下)。 您能告诉我如何更正代码,以便以所需格式输入 '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'])
此转换的结果是 Pandas datetime
对象,可实现纳秒精度(我将其与限于微秒精度的 Python datetime
对象区分开来)。
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 ]})
FWIW,我经常使用pd.read_csv(io.StringIO(text))
将copy/pastetabular-looking数据转化为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