如果我有一个100+列的文件,如何将每列放入一个数组,由列标题引用,而不必执行header1 = [1,2,3],header2 = ['a', 'b','c'],依此类推......?
这是我目前所拥有的,其中headers是标题名称的列表:
import pandas as pd
data = []
df = pd.read_csv('outtest.csv')
for i in headers:
data.append(getattr(df, i).values)
我希望数组头的每个元素都是数据中相应数据数组的变量名(它们按顺序排列)。不知何故,我想要一行这样做,以便我可以说下一行,例如,test = headername1 * headername2。
答案 0 :(得分:2)
import pandas as pd
如果标题位于csv文件中,我们可以使用:
df = pd.read_csv('outtest.csv')
如果csv文件中没有标题:
headers = ['list', 'of', 'headers']
df = pd.read_csv('outtest.csv', header=None, names=headers)
假设headername1和headername2是常数:
test = df.headername1 * df.headername2
或者
test = df['headername1'] * df['headername2']
假设它们是可变的:
test = df[headername1] * df[headername2]
默认情况下,这种访问形式返回pd.Series
,通常可以与numpy互操作。您可以使用.values
显式获取值:
df[headername1].values
但你似乎已经知道了这一点。
答案 1 :(得分:0)
我想我知道你要去做什么,所以使用StringIO对象来模拟文件对象作为设置:
import pandas as pd
import StringIO
txt = '''foo,bar,baz
1, 2, 3
3, 2, 1'''
fileobj = StringIO.StringIO(txt)
这是您想要的大致代码:
data = []
df = pd.read_csv(fileobj)
for i in df.columns:
data.append(df[i])
for i in data:
print i
打印
0 1
1 3
Name: foo
0 2
1 2
Name: bar
0 3
1 1
Name: baz