我有一个文本文件(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
答案 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+")