从记录中用熊猫索引几个 csv 文件?
Posted
技术标签:
【中文标题】从记录中用熊猫索引几个 csv 文件?【英文标题】:indexing several csv files with pandas from records? 【发布时间】:2012-02-13 11:01:07 【问题描述】:我有一个包含两列但没有标题标签的 csv 文件列表 ("file1", "file2", ..."
)。我想为它们分配标题标签,并将它们分配为DataFrame
,它由文件索引,然后由这些列标签索引。例如,我试过:
import pandas
mydict =
labels = ["col1", "col2"]
for myfile in ["file1", "file2"]:
my_df = pandas.read_table(myfile, names=labels)
# build dictionary of dataframe records
mydict[myfile] = my_df
test = pandas.DataFrame(mydict)
这会产生一个 DataFrame,测试,由 "myfile1", "myfile2"...
索引但是,我希望每个都由 "col1"
和 "col2"
索引。我的问题是:
我怎样才能使第一个索引是文件,第二个索引是我分配的列(在变量labels
中)?这样我就可以写了:
test["myfile1"]["col1"]
目前,test["myfile1"]
只给了我一系列记录。
另外,我怎样才能重新索引事物,以便第一个索引是每个文件的列标签,第二个是文件名?这样我就可以写了:
test["col1"]["myfile1"]
或print test["col1"]
,然后查看为myfile1, myfile2
显示的"col1"
的值等。
【问题讨论】:
DataFrame 是一种二维数据结构,具有列和行。我不太清楚您的数据是什么样的,但考虑使用面板,它是 3D 结构。 pandas.sourceforge.net/dsintro.html#panel 【参考方案1】:如果您使用的是 pandas >= 0.7.0(目前仅在 GitHub 存储库中可用,不过我很快就会发布!),您可以连接 DataFrames 的字典:
http://pandas.sourceforge.net/merging.html#more-concatenating-with-group-keys
In [6]: data
Out[6]:
'file1.csv': A B
0 1.0914 -1.3538
1 0.5775 -0.2392
2 -0.2157 -0.2253
3 -2.4924 1.0896
4 0.6910 0.8992
5 -1.6196 0.3009
6 -1.5500 0.1360
7 -0.2156 0.4530
8 1.7018 1.1169
9 -1.7378 -0.3373,
'file2.csv': A B
0 -0.4948 -0.15551
1 0.6987 0.85838
2 -1.3949 0.25995
3 1.5314 1.25364
4 1.8582 0.09912
5 -1.1717 -0.21276
6 -0.2603 -1.78605
7 -3.3247 1.26865
8 0.7741 -2.25362
9 -0.6956 1.08774
In [10]: cdf = concat(data, axis=1)
In [11]: cdf
O ut[11]:
file1.csv file2.csv
A B A B
0 1.0914 -1.3538 -0.4948 -0.15551
1 0.5775 -0.2392 0.6987 0.85838
2 -0.2157 -0.2253 -1.3949 0.25995
3 -2.4924 1.0896 1.5314 1.25364
4 0.6910 0.8992 1.8582 0.09912
5 -1.6196 0.3009 -1.1717 -0.21276
6 -1.5500 0.1360 -0.2603 -1.78605
7 -0.2156 0.4530 -3.3247 1.26865
8 1.7018 1.1169 0.7741 -2.25362
9 -1.7378 -0.3373 -0.6956 1.08774
那么如果你想切换列索引的顺序,你可以这样做:
In [14]: cdf.swaplevel(0, 1, axis=1)
Out[14]:
A B A B
file1.csv file1.csv file2.csv file2.csv
0 1.0914 -1.3538 -0.4948 -0.15551
1 0.5775 -0.2392 0.6987 0.85838
2 -0.2157 -0.2253 -1.3949 0.25995
3 -2.4924 1.0896 1.5314 1.25364
4 0.6910 0.8992 1.8582 0.09912
5 -1.6196 0.3009 -1.1717 -0.21276
6 -1.5500 0.1360 -0.2603 -1.78605
7 -0.2156 0.4530 -3.3247 1.26865
8 1.7018 1.1169 0.7741 -2.25362
9 -1.7378 -0.3373 -0.6956 1.08774
另外,也许有点直截了当,您可以使用面板:
In [16]: p = Panel(data)
In [17]: p
Out[17]:
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 10 (major) x 2 (minor)
Items: file1.csv to file2.csv
Major axis: 0 to 9
Minor axis: A to B
In [18]: p = p.swapaxes(0, 2)
In [19]: p
Out[19]:
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 10 (major) x 2 (minor)
Items: A to B
Major axis: 0 to 9
Minor axis: file1.csv to file2.csv
In [20]: p['A']
Out[20]:
file1.csv file2.csv
0 1.0914 -0.4948
1 0.5775 0.6987
2 -0.2157 -1.3949
3 -2.4924 1.5314
4 0.6910 1.8582
5 -1.6196 -1.1717
6 -1.5500 -0.2603
7 -0.2156 -3.3247
8 1.7018 0.7741
9 -1.7378 -0.6956
【讨论】:
以上是关于从记录中用熊猫索引几个 csv 文件?的主要内容,如果未能解决你的问题,请参考以下文章