将CSV文件导入为pandas DataFrame

时间:2013-01-16 18:50:15

标签: python pandas csv dataframe

我有一个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")  

这将返回一个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

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

9 个答案:

答案 0 :(得分:117)

pandas救援:

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's类似的pandas DataFrame

答案 1 :(得分:5)

这是使用Python内置csv module的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']}

答案 2 :(得分:2)

import pandas as pd
df = pd.read_csv('/PathToFile.txt', sep = ',')

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

答案 3 :(得分:1)

要将CSV文件作为pandas DataFrame读取,您需要使用pd.read_csv,但这不是故事的结局。数据以多种不同的格式存在,并且以不同的方式存储,因此您经常需要将其他参数传递给read_csv以确保正确读取数据。

这是一张表格,列出了CSV文件遇到的常见情况以及您需要使用的适当参数。通常,您需要以下参数的全部或某种组合来读取您的数据。

enter image description here

  

脚注

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

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

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

  6.   
  7. 将具有未命名索引的DataFrame保存到CSV,然后在以后重新读取时,发生“未命名:0”。不必修复   阅读时出现问题,您也可以使用

    解决问题
    df.to_csv(..., index=False)
    
  8.   

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

答案 4 :(得分:1)

尝试一下

import pandas as pd
data=pd.read_csv('C:/Users/Downloads/winequality-red.csv')

用找到数据集的位置替换文件目标位置,请参考此URL https://medium.com/@kanchanardj/jargon-in-python-used-in-data-science-to-laymans-language-part-one-12ddfd31592f

答案 5 :(得分:0)

您可以使用python标准库中的csv module来处理CSV文件。

示例:

import csv
with open('some.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        print row

答案 6 :(得分:0)

%cd C:\Users\asus\Desktop\python
import pandas as pd
df = pd.read_csv('value.txt')
df.head()
    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

答案 7 :(得分:0)

将熊猫作为pd导入
数据集= pd.read_csv('/ home / nspython / Downloads / movie_metadata1.csv')

答案 8 :(得分:-1)

请注意清洁,但是:

import csv

with open("value.txt", "r") as f:
    csv_reader = reader(f)
    num = '  '
    for row in csv_reader:
        print num, '\t'.join(row)
        if num == '  ':  
            num=0
        num=num+1

不那么紧凑,但是它可以完成任务:

   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