Подтвердить что ты не робот

Импортируйте CSV файл как панду DataFrame

Какой способ Python для чтения в CSV файле в pandas 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")  

и это вернет R 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 способ получить такую же функциональность?

4b9b3361

Ответ 1

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

Это возвращает pandas DataFrame, который похож на R's.

Ответ 2

Здесь альтернатива библиотеке pandas, использующая встроенный

Ответ 3

Чтобы прочитать CSV файл как DataFrame pandas, вам нужно использовать pd.read_csv.

Но это не то, где история заканчивается; Данные существуют во многих различных форматах и хранятся по-разному, поэтому вам часто придется передавать дополнительные параметры в read_csv чтобы обеспечить правильное считывание ваших данных.

Вот таблица, в которой перечислены распространенные сценарии, встречающиеся с CSV файлами, и соответствующий аргумент, который вам нужно будет использовать. Обычно вам понадобятся все или некоторая комбинация приведенных ниже аргументов для чтения ваших данных.

┌──────────────────────────────────────────────────────────┬─────────────────────────────┬────────────────────────────────────────────────────────┐
│  ScenarioArgumentExample                                               │
├──────────────────────────────────────────────────────────┼─────────────────────────────┼────────────────────────────────────────────────────────┤
│  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=',')             │
└──────────────────────────────────────────────────────────┴─────────────────────────────┴────────────────────────────────────────────────────────┘

Сноски

  1. По умолчанию read_csv использует механизм синтаксического анализа C для производительности. Анализатор C может обрабатывать только одиночные символьные разделители. Если ваш CSV имеет многосимвольный разделитель, вам нужно будет изменить код, чтобы использовать механизм 'python'. Вы также можете передавать регулярные выражения:

    df = pd.read_csv(..., sep=r'\s*\|\s*', engine='python')
    
  2. UnicodeDecodeError возникает, когда данные хранятся в одном формате кодирования, но считываются в другом несовместимом формате. Наиболее распространенными схемами кодирования являются 'utf-8' и 'latin-1', ваши данные, вероятно, вписываются в одну из них.

  3. header=False указывает, что первая строка в CSV является строкой данных, а не строкой заголовка, а names=[...] позволяет вам указать список имен столбцов, которые будут назначены в DataFrame при его создании.

  4. "Безымянный: 0" возникает, когда DataFrame с неназванным индексом сохраняется в CSV и затем перечитывается после. Вместо того, чтобы исправлять проблему при чтении, вы также можете исправить проблему при записи, используя

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

Есть и другие аргументы, которые я здесь не упомянул, но с ними вы столкнетесь чаще всего.

Ответ 4

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

Это импортирует ваш файл .txt или .csv в DataFrame.

Ответ 5

Вы можете использовать модуль csv, найденный в стандартной библиотеке python, для управления файлами CSV.

Пример:

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

Ответ 6

Попробуй это:

import pandas as pd

print(pd.read_csv("path to file"))

Ответ 7

%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

Ответ 9

Обратите внимание на чистоту, но:

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