在 python 中使用 pandas 从文本文件创建列表
Posted
技术标签:
【中文标题】在 python 中使用 pandas 从文本文件创建列表【英文标题】:creating lists from text file using pandas in python 【发布时间】:2013-06-08 02:26:17 【问题描述】:我有一个如下的文本文件 (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
我想在 python 中使用 pandas 为每一列创建列表。
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
【问题讨论】:
您不是用名为 lisa 的帐户问过同样的问题吗?read_csv
默认情况下需要逗号,而不是制表符,因此它无法将您的数据解析为列。使用read_csv('data.txt', delim_whitespace=True)
重试。
但是...为什么你想要这些列表??
@andy 进行进一步计算
正是...您不想为此使用列表!
【参考方案1】:
不清楚为什么要使用 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]
【讨论】:
@burhan 实际上,我想使用 pandas 的思维来简化程序。但熊猫并没有像我想象的那样工作。所以现在也在考虑你的解决方案。 最好寻求问题的帮助,而不是问题的解决方案。这通常被称为XY problem @burhan 我的代码 Traceback 出错(最近一次调用最后一次):文件“E:\PYTHON\test.py”,第 3 行,在试试这样的:
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
它将遍历所有列并为它们创建列表。
【讨论】:
【参考方案3】:要将 Series(例如,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']
等等。
【讨论】:
我的 df 输出看起来像你上面的,但是当我尝试df['name'].tolist()
时,我收到了 KeyError: u'no item named name'
消息。
您能准确地发布df
的输出吗?我怀疑你的列名没有正确加载。
是的,安迪就在这里。查看pandas documentation 了解更多信息。
df = pandas.read_csv("pandas_test.txt", sep=r"\s+")
用于处理示例文件中的前导空格。【参考方案4】:
由于上面的示例文本文件在第一列有前导空格,因此必须使用以下内容来防止错误的表导入:
df = pandas.read_csv("pandas_test.txt", sep=r"\s+")
【讨论】:
以上是关于在 python 中使用 pandas 从文本文件创建列表的主要内容,如果未能解决你的问题,请参考以下文章
用于各种日期的 Python/Pandas 正则表达式 [重复]
python3 - 从文本文件格式导入数据帧head1 = value | head2 = value