读取具有键值对的文本文件,并使用python pandas将每一行转换为一个字典

时间:2018-07-07 17:17:08

标签: python pandas

我有一个文本文件(one.txt),其中包含任意数量的键值对(其中键和值之间用=隔开–例如1=8)。以下是一些示例:

1=88|11=1438|15=KKK|45=00|45=00|21=66|86=a
4=13|11=1438|49=DDD|8=157.73|67=00|45=00|84=b|86=a
6=84|41=18|56=TTT|67=00|4=13|45=00|07=d

我需要创建一个带有字典列表的DataFrame,其中每一行都是列表中的一个字典,如下所示:

[{1:88,11:1438,15:kkk,45:7.7....},{4:13,11:1438....},{6:84,41:18,56:TTT...}]

df = pd.read_csv("input.txt",names=['text'],header=None)
data = df['text'].str.split("|")
names=[  y.split('=') for x in data for y in x]
ds=pd.DataFrame(names)
print ds

如何通过分割=符号来为每行创建一个字典?

应为一行多列。 DataFrame应该将所有键作为行,将值作为列。

示例:

1 11 15 45 21 86 4 49 8 67 84 6 41 56 45 07
88 1438 kkk 00 66 a
na 1438 na .....

1 个答案:

答案 0 :(得分:0)

我认为执行.pivot是可行的。试试这个:

import pandas as pd

df = pd.read_csv("input.txt",names=['text'],header=None)
data = df['text'].str.split("|")
names=[  y.split('=') for x in data for y in x]
ds=pd.DataFrame(names)
ds = ds.pivot(columns=0).fillna('')

.fillna('')除去None值。如果要替换为na,可以使用.fillna('na')

输出:

ds.head()

   1
0 07   1    11   15 21 4 41  45 49 56 6 67 8 84 86
0     88
1         1438
2               KKK
3                            00
4                            00

对于空间,我没有打印整个数据框,但是它根据键进行列索引,然后根据每行的值进行值索引(保留逐行字典)。