将 CSV 文件导入为 Pandas DataFrame

新手上路,请多包涵

如何将以下 CSV 文件读入 Pandas DataFrame

 Date,"price","factor_1","factor_2"
2012-06-11,1600.20,1.255,1.548
2012-06-12,1610.02,1.258,1.554
2012-06-13,1618.07,1.249,1.552
2012-06-14,1624.40,1.253,1.556
2012-06-15,1626.15,1.258,1.552
2012-06-16,1626.15,1.263,1.558
2012-06-17,1626.15,1.264,1.572

原文由 mazlor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 345
2 个回答

pandas.read_csv 救援:

 import pandas as pd
df = pd.read_csv("data.csv")
print(df)

这会输出一个熊猫 DataFrame

         Date    price  factor_1  factor_2
0  2012-06-11  1600.20     1.255     1.548
1  2012-06-12  1610.02     1.258     1.554
2  2012-06-13  1618.07     1.249     1.552
3  2012-06-14  1624.40     1.253     1.556
4  2012-06-15  1626.15     1.258     1.552
5  2012-06-16  1626.15     1.263     1.558
6  2012-06-17  1626.15     1.264     1.572

原文由 root 发布,翻译遵循 CC BY-SA 4.0 许可协议

要将 CSV 文件读取为 pandas DataFrame,您需要使用 pd.read_csv

但这不是故事的结局。数据以许多不同的格式存在并以不同的方式存储,因此您通常需要将其他参数传递给 read_csv 以确保正确读取数据。

下表列出了 CSV 文件遇到的常见情况以及您需要使用的适当参数。您通常需要以下参数的全部或部分组合来读入 您的 数据。

 ┌───────────────────────────────────────────────────────┬───────────────────────┬────────────────────────────────────────────────────┐
│ pandas Implementation                                 │ Argument              │ Description                                        │
├───────────────────────────────────────────────────────┼───────────────────────┼────────────────────────────────────────────────────┤
│ pd.read_csv(..., sep=';')                             │ sep/delimiter         │ Read CSV with different separator¹                 │
│ pd.read_csv(..., delim_whitespace=True)               │ delim_whitespace      │ Read CSV with tab/whitespace separator             │
│ pd.read_csv(..., encoding='latin-1')                  │ encoding              │ Fix UnicodeDecodeError while reading²              │
│ pd.read_csv(..., header=False, names=['x', 'y', 'z']) │ header and names      │ Read CSV without headers³                          │
│ pd.read_csv(..., index_col=[0])                       │ index_col             │ Specify which column to set as the index⁴          │
│ pd.read_csv(..., usecols=['x', 'y'])                  │ usecols               │ Read subset of columns                             │
│ pd.read_csv(..., thousands='.', decimal=',')          │ thousands and decimal │ Numeric data is in European format (eg., 1.234,56) │
└───────────────────────────────────────────────────────┴───────────────────────┴────────────────────────────────────────────────────┘

脚注

  1. 默认情况下, read_csv 使用 C 解析器引擎来提高性能。 C 解析器只能处理单个字符分隔符。如果您的 CSV 有一个多字符分隔符,您将需要修改您的代码以使用 'python' 引擎。您还可以传递正则表达式:
     df = pd.read_csv(..., sep=r'\s*\|\s*', engine='python')

  1. UnicodeDecodeError 当数据以一种编码格式存储但以不同的、不兼容的格式读取时发生。最常见的编码方案是 'utf-8''latin-1' ,您的数据很可能适合其中之一。

  2. header=False 指定 CSV 中的第一行是数据行而不是标题行, names=[...] 允许您指定列名列表以分配给 DataFrame被建造。

  3. 当将具有未命名索引的 DataFrame 保存到 CSV 并在之后重新读取时,会出现“未命名:0”。不必在阅读时解决问题,您还可以在编写时解决问题,方法是使用

    df.to_csv(..., index=False)

还有其他一些我在这里没有提到的论点,但这些是您最常遇到的论点。

原文由 cs95 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题