读取csv文件并返回数据帧

maz*_*lor 70 python csv dataframe 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
Run Code Online (Sandbox Code Playgroud)

在R中我们可以使用中读取此文件

price <- read.csv("value.txt")  
Run Code Online (Sandbox Code Playgroud)

这将返回一个data.frame,我可以用它来进行统计操作:

> 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
Run Code Online (Sandbox Code Playgroud)

是否有Pythonic方法来获得相同的功能?

roo*_*oot 127

大熊猫救援:

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
Run Code Online (Sandbox Code Playgroud)

这将返回类似于的pandas DataFrameR's.


cs9*_*s95 16

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

但这不是故事的结局;数据以多种不同的格式存在并以不同的方式存储,因此您通常需要传递额外的参数read_csv以确保您的数据被正确读取。

下面的表格列出了 CSV 文件遇到的常见场景以及您需要使用的适当参数。您通常需要以下参数的全部或某些组合来读入您的数据。

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?  Scenario                                                ?  Argument                   ?  Example                                               ?
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?  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=',')             ?
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

脚注

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

    df = pd.read_csv(..., sep=r'\s*\|\s*', engine='python')
    
    Run Code Online (Sandbox Code Playgroud)
  2. UnicodeDecodeError当数据以一种编码格式存储但以另一种不兼容的编码格式读取时发生。最常见的编码方案是'utf-8''latin-1',您的数据可能适合其中之一。

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

  4. 当具有未命名索引的 DataFrame 保存到 CSV 然后重新读取时,会发生“未命名:0”。不必在阅读时解决问题,您还可以在写作时使用以下方法解决问题

    df.to_csv(..., index=False)
    
    Run Code Online (Sandbox Code Playgroud)

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


小智 7

import pandas as pd
df = pd.read_csv('/PathToFile.txt', sep = ',')
Run Code Online (Sandbox Code Playgroud)

这会将您的 .txt 或 .csv 文件导入到 DataFrame 中。


sid*_*idi 6

这里是使用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
Run Code Online (Sandbox Code Playgroud)

将打印

{'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']}
Run Code Online (Sandbox Code Playgroud)