Python 在日期之前添加0

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

编程新手: 我有一个CSV文件,其中日期的格式为
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]
它不起作用。我对此有两个疑问:

  • 想了解为什么这在逻辑上是错误的,最好的解决方案是什么

  • 从CSV文件中读取数据时,是否可以将只有整数的列直接转换为字符串

  • 请帮忙

     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
    不要将日期转换为数字?看见