将 CSV 加载到 Pandas MultiIndex DataFrame
Posted
技术标签:
【中文标题】将 CSV 加载到 Pandas MultiIndex DataFrame【英文标题】:Load CSV to Pandas MultiIndex DataFrame 【发布时间】:2013-10-06 20:54:50 【问题描述】:我有一个 719mb 的 CSV 文件,看起来像:
from, to, dep, freq, arr, code, mode (header row)
RGBOXFD,RGBPADTON,127,0,27,99999,2
RGBOXFD,RGBPADTON,127,0,33,99999,2
RGBOXFD,RGBRDLEY,127,0,1425,99999,2
RGBOXFD,RGBCHOLSEY,127,0,52,99999,2
RGBOXFD,RGBMDNHEAD,127,0,91,99999,2
RGBDIDCOTP,RGBPADTON,127,0,46,99999,2
RGBDIDCOTP,RGBPADTON,127,0,3,99999,2
RGBDIDCOTP,RGBCHOLSEY,127,0,61,99999,2
RGBDIDCOTP,RGBRDLEY,127,0,1430,99999,2
RGBDIDCOTP,RGBPADTON,127,0,115,99999,2
and so on...
我想加载到 pandas DataFrame。现在我知道 csv 方法有负载:
r = pd.DataFrame.from_csv('test_data2.csv')
但我特别想将它作为“MultiIndex”数据帧加载,其中 from 和 to 是索引:
所以结束了:
dep, freq, arr, code, mode
RGBOXFD RGBPADTON 127 0 27 99999 2
RGBRDLEY 127 0 33 99999 2
RGBCHOLSEY 127 0 1425 99999 2
RGBMDNHEAD 127 0 1525 99999 2
等等。我不知道该怎么做?
【问题讨论】:
【参考方案1】:你可以使用pd.read_csv
:
>>> df = pd.read_csv("test_data2.csv", index_col=[0,1], skipinitialspace=True)
>>> df
dep freq arr code mode
from to
RGBOXFD RGBPADTON 127 0 27 99999 2
RGBPADTON 127 0 33 99999 2
RGBRDLEY 127 0 1425 99999 2
RGBCHOLSEY 127 0 52 99999 2
RGBMDNHEAD 127 0 91 99999 2
RGBDIDCOTP RGBPADTON 127 0 46 99999 2
RGBPADTON 127 0 3 99999 2
RGBCHOLSEY 127 0 61 99999 2
RGBRDLEY 127 0 1430 99999 2
RGBPADTON 127 0 115 99999 2
我使用skipinitialspace=True
来消除标题行中那些烦人的空格。
【讨论】:
【参考方案2】:from_csv() 的工作原理类似:
import pandas as pd
df = pd.DataFrame.from_csv(
'data.txt',
index_col = [0, 1]
)
print df
--output:--
dep freq arr code mode
from to
RGBOXFD RGBPADTON 127 0 27 99999 2
RGBPADTON 127 0 33 99999 2
RGBRDLEY 127 0 1425 99999 2
RGBCHOLSEY 127 0 52 99999 2
RGBMDNHEAD 127 0 91 99999 2
RGBDIDCOTP RGBPADTON 127 0 46 99999 2
RGBPADTON 127 0 3 99999 2
RGBCHOLSEY 127 0 61 99999 2
RGBRDLEY 127 0 1430 99999 2
RGBPADTON 127 0 115 99999 2
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.from_csv.html#pandas.DataFrame.from_csv
从这次讨论中,
https://github.com/pydata/pandas/issues/4916
看起来 read_csv() 的实现是为了让您设置更多选项,这使得 from_csv() 变得多余。
【讨论】:
仅供参考:from_csv 已被弃用(它与 read_csv 做同样的事情,但有一些令人惊讶的设置,有时在日期解析中表现得很奇怪)。 from_csv 已弃用我没有看到。 你说得对,pandas 还没有弃用它。对不起!也就是说,我们一直在考虑弃用。它也有点奇怪,比如它默认为parses ints as dates,我猜我们一直是discussing deprecating it。 Np。我阅读了您链接上的讨论以及它在上一篇文章中链接到的讨论,这是我在帖子中包含的链接。以上是关于将 CSV 加载到 Pandas MultiIndex DataFrame的主要内容,如果未能解决你的问题,请参考以下文章
使用 pyodbc 和 pandas 将 CSV 加载到 .mdb
如何将 CSV/TSV 文件从 Pig 加载/导出到 Pandas?
将非常大的 CSV 数据集加载到 Python 和 R 中,Pandas 陷入困境