Импортируйте 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 способ получить такую же функциональность?
Ответы
Ответ 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 файлами, и соответствующий аргумент, который вам нужно будет использовать. Обычно вам понадобятся все или некоторая комбинация приведенных ниже аргументов для чтения ваших данных.
┌──────────────────────────────────────────────────────────┬─────────────────────────────┬────────────────────────────────────────────────────────┐
│ 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=',') │
└──────────────────────────────────────────────────────────┴─────────────────────────────┴────────────────────────────────────────────────────────┘
Сноски
-
По умолчанию read_csv
использует механизм синтаксического анализа C для производительности. Анализатор C может обрабатывать только одиночные символьные разделители. Если ваш CSV имеет многосимвольный разделитель, вам нужно будет изменить код, чтобы использовать механизм 'python'
. Вы также можете передавать регулярные выражения:
df = pd.read_csv(..., sep=r'\s*\|\s*', engine='python')
-
UnicodeDecodeError
возникает, когда данные хранятся в одном формате кодирования, но считываются в другом несовместимом формате. Наиболее распространенными схемами кодирования являются 'utf-8'
и 'latin-1'
, ваши данные, вероятно, вписываются в одну из них.
-
header=False
указывает, что первая строка в CSV является строкой данных, а не строкой заголовка, а names=[...]
позволяет вам указать список имен столбцов, которые будут назначены в DataFrame при его создании.
-
"Безымянный: 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
Ответ 8
Попробуйте это
import pandas as pd
data=pd.read_csv('C:/Users/Downloads/winequality-red.csv')
Замените целевое местоположение файла тем, где находится ваш набор данных, см. этот URLhttps://medium.com/@kanchanardj/jargon-in-python-used-in-data-science-to-laymans-language-part-one-12ddfd31592f
Ответ 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