通常,数据以变量列显示,但是例如,如果我在.txt文件中有类似
Data1,1,2,3,4,5
Data2,3,1,4
我可以用熊猫来构造数据框架的方式吗?
d = {"Data1":[1,2,3,4,5], "Data2": [3,1,4,1,2]}
df = pd.DataFrame(data=d)
编辑:
本来我希望数据集的大小不同,但熊猫不允许它抛出ValueError
答案 0 :(得分:2)
读入文件,转置数据框,稍等一下……
用于伪造文件的设置:
>>> from io import StringIO
>>> file = StringIO('''Data1,1,2,3,4,5
...:Data2,3,1,4''')
创建数据框:
>>> df = pd.read_csv(file, header=None).T
>>> df = df.rename(columns=df.loc[0]).drop(0, axis=0)
>>>
>>> df
>>>
Data1 Data2
1 1 3
2 2 1
3 3 4
4 4 NaN
5 5 NaN
但是,在彼得·莱姆比格勒(Peter Leimbigler)的this回答中,这样做更加优雅!
正如ALollz所指出的,这些解决方案仅在文件中没有行的字段比第一行多的情况下有效。
这是我尝试一种更通用的解决方案:
>>> file = StringIO('''Data1,3,1,4
...:Data2,1,2,3,4,5
...:Data3,7,8''')
>>> df = pd.concat([pd.Series(line.split(',')) for line in file], axis=1)
>>> df.rename(columns=df.loc[0]).drop(0, axis=0).astype(float)
>>>
Data1 Data2 Data3
1 3.0 1.0 7.0
2 1.0 2.0 8.0
3 4.0 3.0 NaN
4 NaN 4.0 NaN
5 NaN 5.0 NaN
答案 1 :(得分:2)
df = pd.read_csv('example_data.txt', header=None, index_col=0).T
df
0 Data1 Data2
1 1.0 3.0
2 2.0 1.0
3 3.0 4.0
4 4.0 NaN
5 5.0 NaN
答案 2 :(得分:2)
如果第一行不是最长的行,您可以阅读整行,然后用熊猫将其拆分。
df = pd.read_csv('test.csv', sep='\n', header=None)
df[0].str.split(',', expand=True).set_index(0).rename_axis(None,0).T
Data1 Data2 Data3
1 1 3 1
2 2 1 2
3 3 4 3
4 4 None 4
5 5 None 5
6 None None 6
7 None None 7
8 None None 8
9 None None 9
test.csv
:Data1,1,2,3,4,5
Data2,3,1,4
Data3,1,2,3,4,5,6,7,8,9
答案 3 :(得分:0)
您可以执行data_dict = {line.split(',')[0]:{line.split(',')[1:] for line in lines}
,其中通过读入数据来创建lines
。然后应用您想要获得[3,1,4,1,2]
而不是[3,1,4]
的任何规则(您不会说想要什么规则)。然后执行pd.DataFrame(data_dict)
。