熊猫按行读取数据

时间:2018-11-16 16:22:06

标签: python pandas

通常,数据以变量列显示,但是例如,如果我在.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

4 个答案:

答案 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)