我正在将 csv 文件 (SimResults_Daily.csv) 读入 pandas,其结构如下:
#, Job_ID, Date/Time, value1, value2,
0, ID1, 05/01 24:00:00, 5, 6
1, ID2, 05/02 24:00:00, 6, 15
2, ID3, 05/03 24:00:00, 20, 21
等等。
由于 pandas parse_dates 无法读取日期时间格式,我发现可以使用命令:str.replace('24:','00:')
。
我当前的代码是:
dateparse = lambda x: pd.datetime.strptime(x, '%m-%d %H:%M:%S')
df = pd.read_csv('SimResults_Daily.csv',
skipinitialspace=True,
date_parser=dateparse,
parse_dates=['Date/Time'],
index_col=['Date/Time'],
usecols=['Job_ID',
'Date/Time',
'value1',
'value2',
header=0)
我应该在代码中的什么位置实现str.replace
命令?
最佳答案
您可以使用:
import pandas as pd
import io
temp=u"""#,Job_ID,Date/Time,value1,value2,
0,ID1,05/01 24:00:00,5,6
1,ID2,05/02 24:00:00,6,15
2,ID3,05/03 24:00:00,20,21"""
dateparse = lambda x: pd.datetime.strptime(x.replace('24:','00:'), '%m/%d %H:%M:%S')
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp),
skipinitialspace=True,
date_parser=dateparse,
parse_dates=['Date/Time'],
index_col=['Date/Time'],
usecols=['Job_ID', 'Date/Time', 'value1', 'value2'],
header=0)
print (df)
Job_ID value1 value2
Date/Time
1900-05-01 ID1 5 6
1900-05-02 ID2 6 15
1900-05-03 ID3 20 21
<小时/>
还可以添加另一个带有双 replace
- year
的解决方案:
dateparse = lambda x: x.replace('24:','00:').replace(' ','/1900 ')
df = pd.read_csv(io.StringIO(temp),
skipinitialspace=True,
date_parser=dateparse,
parse_dates=['Date/Time'],
index_col=['Date/Time'],
usecols=['Job_ID', 'Date/Time', 'value1', 'value2'],
header=0)
print (df)
Job_ID value1 value2
Date/Time
1900-05-01 ID1 5 6
1900-05-02 ID2 6 15
1900-05-03 ID3 20 21
<小时/>
dateparse = lambda x: x.replace('24:','00:').replace(' ','/2016 ')
df = pd.read_csv(io.StringIO(temp),
skipinitialspace=True,
date_parser=dateparse,
parse_dates=['Date/Time'],
index_col=['Date/Time'],
usecols=['Job_ID', 'Date/Time', 'value1', 'value2'],
header=0)
print (df)
Job_ID value1 value2
Date/Time
2016-05-01 ID1 5 6
2016-05-02 ID2 6 15
2016-05-03 ID3 20 21
关于python - 从 csv 读取解析时修改日期时间格式 - pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39959925/