使用python中的pandas从文本文件创建列表

时间:2013-06-12 04:22:58

标签: python python-2.7 python-3.x pandas

我有一个文本文件(data.txt),如下所示:

name height  weight
    A   15.5    55.7
    B   18.9    51.6
    C   17.4    67.3
    D   11.4    34.5
    E   23.4    92.1

我想使用pandas在python中为每列创建列表。

import pandas
with open (pandas.read_csv('data.txt')) as df:
    name= df.icol(0)
    height= df.icol(1)
    weight= df.icol(2)
    print (name)
    print (height)
    print (weight)

我还想避免列表中的标题(名称,身高,体重)。

print(df)提供如下:

name\theight\tweight
0        A\t15.5\t55.7
1        B\t18.9\t51.6
2        C\t17.4\t67.3
3        D\t11.4\t34.5
4        E\t23.4\t92.1

4 个答案:

答案 0 :(得分:1)

尝试这样的事情:

import pandas
df = pandas.read_csv('data.txt')
# Assuming there's a columns with the headers 'name', 'height', 'weight'
name = list(df['name'])
height = list(df['height'])
weight = list(df['weight'])
print name
print height
print weight

在使用this example并查看read_csv

的文档后,这可能会有效

如果您希望使用标题更加动态

for k in df.keys():
    l = list(df[k])
    print l

将迭代所有列并为它们创建列表。

答案 1 :(得分:0)

要将系列(例如,DataFrame的列)转换为没有标题的普通Python值列表,请使用Series方法tolist()

In [9]: df
Out[9]: 
  name  height  weight
0    A    15.5    55.7
1    B    18.9    51.6
2    C    17.4    67.3
3    D    11.4    34.5
4    E    23.4    92.1

In [10]: name, height, weight = [df[col].tolist() for col in df]

In [11]: name
Out[11]: ['A', 'B', 'C', 'D', 'E']

等等。

答案 2 :(得分:0)

不清楚为什么要使用pandas,因为你没有说明为什么要在列表中专门使用pandas,所以这是一个使用csv的解决方案:

import csv

with open('data.txt') as f:
    reader = csv.DictReader(f, delimiter='\t')
    rows = list(reader)

现在rows是一个字典列表,每个字典都有一个表示行的标题;获取每个列:

names = [i['name'] for i in rows]
heights = [float(i['height']) if i['height'] else 0.0 for i in rows]
weights = [float(i['weight']) if i['weight'] else 0.0 for i in rows]

答案 3 :(得分:0)

由于上面的示例文本文件在第一列中具有前导空格,因此必须使用以下内容来防止错误的表导入:

df = pandas.read_csv("pandas_test.txt", sep=r"\s+")