Python 在日期之前添加0
编程新手: 我有一个CSV文件,其中日期的格式为Python 在日期之前添加0,python,python-3.x,pandas,dataframe,jupyter-notebook,Python,Python 3.x,Pandas,Dataframe,Jupyter Notebook,编程新手: 我有一个CSV文件,其中日期的格式为DDMMYYYY,而在python中读取该文件时,其类型为int。所以一个日期,比如说01022020被视为1022020。我需要在所有这些日期前面添加0,其中日期'len小于8 Index Date Value 0 10042020 10.5 1 03052020 14.2 2 0905
DDMMYYYY
,而在python中读取该文件时,其类型为int
。所以一个日期,比如说01022020
被视为1022020
。我需要在所有这些日期前面添加0
,其中日期'len
小于8
Index Date Value
0 10042020 10.5
1 03052020 14.2
2 09052020 16.3
3 13052020 17.5
我使用df.Date.map(str)
将列转换为str
,但不知道如何继续
我试过:
if len(df.Date[i])==7:
df.Date[i]= df.Date.str["0"]+df.Date.str[i]
它不起作用。我对此有两个疑问:
print(df)#input
Index Date Value
0 0 10042020 10.5
1 1 3052020 14.2
2 2 9052020 16.3
3 3 13052020 17.5
使用.astype(str)
将日期列转换为字符串,并使用.str.pad()方法填充len小于8的任何字符串
df['Date']=df['Date'].astype(str).str.pad(width=8, side='left', fillchar='0')
Index Date Value
0 0 10042020 10.5
1 1 03052020 14.2
2 2 09052020 16.3
3 3 13052020 17.5
如果datetime对象中需要,则
df['Date']=pd.to_datetime(df['Date'],format='%d%m%Y')
锁在一起
df['Date']=pd.to_datetime(df['Date'].astype(str).str.pad(width=8, side='left', fillchar='0'),format='%d%m%Y')
使用,.str.zfill
:
s = pd.Series([1122020, 2032020, 12312020])
s
输入系列:
0 1122020
1 2032020
2 12312020
dtype: int64
使用“转换为字符串”,然后使用zfill:
s.astype(str).str.zfill(8)
输出:
0 01122020
1 02032020
2 12312020
dtype: object
0 2020-01-12
1 2020-02-03
2 2020-12-31
dtype: datetime64[ns]
然后您可以使用pd.to\u datetime
和格式
:
pd.to_datetime(s.astype(str).str.zfill(8), format='%m%d%Y')
输出:
0 01122020
1 02032020
2 12312020
dtype: object
0 2020-01-12
1 2020-02-03
2 2020-12-31
dtype: datetime64[ns]
我见过的将int转换为左填充零的字符串的最简单解决方案是使用zfill命令,例如str(df.Date[I])。zfill(8)
假设您在csv加载中使用熊猫,您可以指定加载时的数据类型:df=pd.read\u csv('test.csv',dtype={'Date':'string'})
它应该是“0”+df.Date[i]
您不需要.str
,因为您已经将其转换为字符串。为什么不告诉read\u csv
不要将日期转换为数字?看见