将 CSV 文件导入为 Pandas DataFrame
- 2024-12-13 08:36:00
- admin 原创
- 170
问题描述:
如何将以下CSV文件读入 Pandas DataFrame
?
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
解决方案 1:
pandas.read_csv
救援:
import pandas as pd
df = pd.read_csv("data.csv")
print(df)
这将输出一个 pandas DataFrame
:
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
解决方案 2:
要将 CSV 文件读取为 pandas DataFrame,您需要使用pd.read_csv
,它是sep=','
默认值。
但故事并没有就此结束;数据存在于许多不同的格式中,并以不同的方式存储,因此您通常需要传递其他参数以read_csv
确保正确读取数据。
下表列出了 CSV 文件的常见情况以及您需要使用的相应参数。您通常需要以下所有或部分参数组合来读取数据。
┌───────────────────────────────────────────────────────┬───────────────────────┬────────────────────────────────────────────────────┐
│ pandas Implementation │ Argument │ Description │
├───────────────────────────────────────────────────────┼───────────────────────┼────────────────────────────────────────────────────┤
│ pd.read_csv(..., sep=';') │ sep/delimiter │ Read CSV with different separator¹ │
│ pd.read_csv(..., delim_whitespace=True) │ delim_whitespace │ Read CSV with tab/whitespace separator │
│ pd.read_csv(..., encoding='latin-1') │ encoding │ Fix UnicodeDecodeError while reading² │
│ pd.read_csv(..., header=False, names=['x', 'y', 'z']) │ header and names │ Read CSV without headers³ │
│ pd.read_csv(..., index_col=[0]) │ index_col │ Specify which column to set as the index⁴ │
│ pd.read_csv(..., usecols=['x', 'y']) │ usecols │ Read subset of columns │
│ pd.read_csv(..., thousands='.', decimal=',') │ thousands and decimal │ Numeric data is in European format (eg., 1.234,56) │
└───────────────────────────────────────────────────────┴───────────────────────┴────────────────────────────────────────────────────┘
脚注
默认情况下,
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 时分配给它的列名列表。当将具有未命名索引的 DataFrame 保存为 CSV 然后重新读取时,会出现“未命名:0”的情况。您不必在读取时修复此问题,还可以在写入时修复此问题,方法是使用
df.to_csv(..., index=False)
还有一些我在这里没有提到的其他参数,但这些是你最常遇到的参数。
解决方案 3:
这是使用 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']}
解决方案 4:
注意,同样干净,但是:
import csv
with open("value.txt", "r") as f:
csv_reader = reader(f)
num = ' '
for row in csv_reader:
print num, ' '.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
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD