首页 > 解决方案 > 在熊猫中将行转换为正确的数据框

问题描述

我有这种类型的行

start=2019-11-02T00:00:00&end=2019-11-03T00:00:00&step=1L
source=B&select=mean&step=5K&format=2&start=2019-11-02T00

我想以这种方式将其更改为正确的 csv 格式

start,end,step,source,select,format
2019-11-02T00:00:00,2019-11-03T00:00:00,1L,,,
2019-11-02T00,,5K,B,mean,2

如您所见,第一行没有来源、选择和格式,因此该 csv 中没有该行的值。同样,第二行有 Nan,因为它没有值。

我如何在熊猫中做到这一点?

标签: pythonpandas

解决方案


DataFrame首先将文件转换为数据中不存在某些 sep的一列read_csv

import pandas as pd
from io import StringIO

temp="""start=2019-11-02T00:00:00&end=2019-11-03T00:00:00&step=1L
source=B&select=mean&step=5K&format=2&start=2019-11-02T00"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), sep=";", names=['data'])

print (df)
                                                data
0  start=2019-11-02T00:00:00&end=2019-11-03T00:00...
1  source=B&select=mean&step=5K&format=2&start=20...

然后在列表理解中创建字典列表并传递给DataFrame构造函数:

L = [dict([y.split('=') for y in x.split('&')]) for x in df['data']]

df = pd.DataFrame(L)
print (df)
                 start                  end step source select format
0  2019-11-02T00:00:00  2019-11-03T00:00:00   1L    NaN    NaN    NaN
1        2019-11-02T00                  NaN   5K      B   mean      2

最后写入文件的时间DataFrame.to_csv

df.to_csv('filename1.csv', index=False)

推荐阅读