python - 使用带有固定字符串序列的 pandas 解析数据

标签 python csv datetime pandas dataframe

我的文件 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/

相关文章:

python - Django 'resolve' : get the url name instead of the view_function

python - mysql.connector 和常规 MySQL 中的精确查询不返回相同的结果

python - 将json对象保存到csv文件python

Python CSV 阅读器没有任何数据

python - 从 CSV 文件创建 3D 散点图

c# - 如何将长毫秒(纳秒)部分的字符串解析为 DateTime?

c# - 为什么 DateTime.Now.TimeOfDay.ToString ("HH:mm:ss.ffffff") 抛出 FormatException?

python - 将 Grid 和 Pack 与框架一起使用 Tkinter

python - "Not found: Table"用于新的 bigquery 表

java - Java/Android 中 Time 类功能的替换以及 DateTime 类的理解