当前位置: 首页 > 知识库问答 >
问题:

将CSV文件导入为熊猫数据帧

百里秋月
2023-03-14

Python是如何将CSV文件读入pandas数据帧的(我可以使用它进行统计操作,可以有不同类型的列,等等)?

我的CSV文件"value.txt"有以下内容:

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

在R中,我们将使用以下方法读取此文件:

price <- read.csv("value.txt")  

这将返回一个R数据。框架:

> price <- read.csv("value.txt")
> price
     Date   price factor_1 factor_2
1  2012-06-11 1600.20    1.255    1.548
2  2012-06-12 1610.02    1.258    1.554
3  2012-06-13 1618.07    1.249    1.552
4  2012-06-14 1624.40    1.253    1.556
5  2012-06-15 1626.15    1.258    1.552
6  2012-06-16 1626.15    1.263    1.558
7  2012-06-17 1626.15    1.264    1.572

有没有类似python的方法来获得相同的功能?

共有3个答案

金令
2023-03-14

这里有一个使用Python内置csv模块的pandas库的替代方案。

import csv
from pprint import pprint
with open('foo.csv', 'rb') as f:
    reader = csv.reader(f)
    headers = reader.next()
    column = {h:[] for h in headers}
    for row in reader:
        for h, v in zip(headers, row):
            column[h].append(v)
    pprint(column)    # Pretty printer

将打印

{'Date': ['2012-06-11',
          '2012-06-12',
          '2012-06-13',
          '2012-06-14',
          '2012-06-15',
          '2012-06-16',
          '2012-06-17'],
 'factor_1': ['1.255', '1.258', '1.249', '1.253', '1.258', '1.263', '1.264'],
 'factor_2': ['1.548', '1.554', '1.552', '1.556', '1.552', '1.558', '1.572'],
 'price': ['1600.20',
           '1610.02',
           '1618.07',
           '1624.40',
           '1626.15',
           '1626.15',
           '1626.15']}
融烨磊
2023-03-14

要将CSV文件作为数据帧读取,需要使用pd。读取\u csv

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

下面的表格列出了CSV文件遇到的常见情况,以及您需要使用的相应参数。您通常需要以下全部或部分参数组合才能读入数据。

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

脚注

>

  • 默认情况下,read\u csv使用C解析器引擎来提高性能。C解析器只能处理单字符分隔符。如果CSV具有多字符分隔符,则需要修改代码以使用'python'引擎。您还可以传递正则表达式:

    df = pd.read_csv(..., sep=r'\s*\|\s*', engine='python')
    

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

    header=False指定CSV中的第一行是数据行而不是标题行,并且names=[…] 允许您指定要在创建数据帧时分配给该数据帧的列名列表。

    当带有未命名索引的数据帧保存到CSV并在之后重新读取时,会出现“未命名:0”。您不必在阅读时修复问题,也可以在编写时使用

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

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

  • 长孙逸仙
    2023-03-14

    熊猫来营救:

    import pandas as pd
    print pd.read_csv('value.txt')
    
            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
    

    这将返回类似于R的DataFrame。

     类似资料:
    • 问题内容: 如何将大数据文件分块写入CSV文件? 我有一组大型数据文件(1M行x 20列)。但是,我只关注该数据的5列左右。 我想通过只用感兴趣的列制作这些文件的副本来使事情变得更容易,所以我可以使用较小的文件进行后期处理。因此,我计划将文件读取到数据帧中,然后写入csv文件。 我一直在研究将大数据文件以块的形式读入数据框。但是,我还无法找到有关如何将数据分块写入csv文件的任何信息。 这是我现在

    • 我有一个1.5GB.dat文件需要作为pandas数据帧导入,我遇到了内存问题(8GB RAM)。如何将dat文件分解成块来执行分析?

    • 问题内容: 我正在编写一个脚本,以将带有标头的大.xlsx文件减少到一个csv中,然后根据标头名称仅写有所需列的新csv文件。 我得到的错误是最后一部分代码,它说 我确定我忽略了一些愚蠢的事情,但是我已经阅读了熊猫网站上的to_csv文档,但我仍然感到茫然。我知道我使用了不正确的to_csv参数,但我似乎无法理解我猜的文档。 任何帮助表示赞赏,谢谢! 问题答案: 选择特定列的方法是这样的-

    • 问题内容: 我正在使用python 3.6并尝试使用以下代码将json文件(350 MB)下载为pandas数据框。但是,出现以下错误: 我该如何解决错误? 问题答案: 如果以二进制()格式打开文件,则会得到字节。怎么样:

    • 想要知道更多东西吗?当你需要从表中查找某些值时,可以使用冗长的 case 语句或 selectors 实现,但更整洁的方式是使用 extlookup 函数实现。 在 puppetmaster 上可以使用 extlookup 函数查询外部的 CSV 文件,并返回匹配的数据片段。 将所有数据组织到一个单一的文件并将它从 Puppet 配置清单中分离出来, 可以使维护工作变得更简单,也便于与其他人分享:

    • 我有一个这样的数据框: 如何将转换为矩阵如下: 然后,我需要将导出到Excel或csv文件。