我的文本文件中没有标题。每行中的值都有一个标签,指示它们属于哪一列。我想将这些标签用作列名,并在列下输入数据。
我要导入一个包含以下内容的文本文件:
Column1=variable11&Column2=variable12&Column3=variable13&Column4=variable14
Column1=variable12&Column2=variable22&Column3=variable23
Column1=variable13&Column2=variable32&Column3=variable33&Column4=variable34&Column5=variable35
我希望结果是这样的表:
Column1 Column2 Column3 Column4 Column5
variable11 variable12 variable13 variable14
variable21 variable22 variable23
variable31 variable32 variable33 variable34 variable35
答案 0 :(得分:1)
我在这里假设第2行和第3行上的Column1=variable1=21
是错误的。
df = pd.read_csv('file', header=None)
df = df[0].str.split('=|&', expand=True)
tmp = df.loc[:,1::2].copy()
tmp.columns = df.loc[:,::2].apply(lambda x: x.dropna().iloc[0])
输出
Column1 Column2 Column3 column4 Column5
0 variable11 variable12 variable13 variable14 None
1 variable21 variable22 variable23 None None
2 variable31 variable32 variable33 variable34 variable35
答案 1 :(得分:1)
您的数据中有多个错字,可能需要两次split
才能将格式恢复为dict
,然后将dict
传递给pandas.DataFrame
构造函数
pd.DataFrame([dict(x)for x in df.Read.str.split('&').apply(lambda x : [tuple(y.split('=',1)) for y in x])])
Out[128]:
Column1 Column2 Column3 Column4 Column5 column4
0 variable11 variable12 variable13 NaN NaN variable14
1 variable1=21 variable22 variable23 NaN NaN NaN
2 variable1=31 variable32 variable33 variable34 variable35 NaN
df=pd.DataFrame([dict(x)for x in df.Read.str.split('&').apply(lambda x : [tuple(y.split('=',1)) for y in x])])
df.columns=df.columns.str.upper()
df=df.sum(axis=1,level=0)