我的文件 a.dat 中的数据如下所示:
01/Jul/2016 00:05:09 8438.2
01/Jul/2016 00:05:19 8422.4 g
我希望将它们解析为三列:时间线、 float 、字符串(None 或 g)
我已经尝试过:
df=pd.read_csv('a.dat',sep=' | ',engine='python')
最终有 4 列:日期、时间、 float 和 g
df=pd.read_csv('a.dat',sep=' | (g)',engine='python')
给出 5 列,其中第 1 列和第 4 列为 NaN
有没有更好的方法来创建数据框而不进行任何后期处理?
最佳答案
您可以使用read_csv
:
import pandas as pd
import io
temp=u'''01/Jul/2016 00:05:09 8438.2
01/Jul/2016 00:05:19 8422.4 g'''
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp),
sep='\s+',
names=['date','time','float','string'],
parse_dates=[['date','time']])
print (df)
date_time float string
0 2016-07-01 00:05:09 8438.2 NaN
1 2016-07-01 00:05:19 8422.4 g
或者:
import pandas as pd
import io
temp=u'''01/Jul/2016 00:05:09 8438.2
01/Jul/2016 00:05:19 8422.4 g'''
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp),
delim_whitespace=True,
names=['date','time','float','string'],
parse_dates=[['date','time']])
print (df)
date_time float string
0 2016-07-01 00:05:09 8438.2 NaN
1 2016-07-01 00:05:19 8422.4 g
解决方案 read_fwf
:
import pandas as pd
import io
temp=u'''01/Jul/2016 00:05:09 8438.2
01/Jul/2016 00:05:19 8422.4 g'''
#after testing replace io.StringIO(temp) to filename
df = pd.read_fwf(io.StringIO(temp),
names=['date','time','float','string'],
parse_dates=[['date','time']])
print (df)
date_time float string
0 2016-07-01 00:05:09 8438.2 NaN
1 2016-07-01 00:05:19 8422.4 g
您还可以指定列的宽度:
df = pd.read_fwf(io.StringIO(temp),
fwidths = [20,12,2],
names=['date','time','float','string'],
parse_dates=[['date','time']])
print (df)
date_time float string
0 2016-07-01 00:05:09 8438.2 NaN
1 2016-07-01 00:05:19 8422.4 g
关于python - 使用带有固定字符串序列的 pandas 解析数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38561268/