Pandas read_csv()–将CSV文件读取到DataFrame

时间:2020-02-23 14:42:08  来源:igfitidea点击:

Pandas 的read_csv()方法用于将CSV文件读取到DataFrame对象中。
CSV文件就像一个二维表,其中的值使用定界符分隔。

1.Pandas read_csv()示例

假设我们有一个包含以下内容的CSV文件" employees.csv"。

Emp ID,Emp Name,Emp Role
1,hyman Kumar,Admin
2,David Lee,Editor
3,Lisa Ray,Author

让我们看看如何使用Pandas的read_csv()函数将其读取到DataFrame中。

import pandas

emp_df = pandas.read_csv('employees.csv')

print(emp_df)

输出:

Emp ID      Emp Name Emp Role
0       1  hyman Kumar    Admin
1       2     David Lee   Editor
2       3      Lisa Ray   Author

推荐读物:Python Pandas教程

2.使用Pandas read_csv()函数指定分隔符

CSV文件的默认定界符是逗号。
但是,我们也可以使用任何其他定界符。
假设我们的CSV文件分隔符为#。

Emp ID#Emp Name#Emp Role
1#hyman Kumar#Admin
2#David Lee#Editor
3#Lisa Ray#Author

在这种情况下,我们可以在调用read_csv()函数时指定sep参数。

import pandas

emp_df = pandas.read_csv('employees.csv', sep='#')

print(emp_df)

输出:

Emp ID      Emp Name Emp Role
0       1  hyman Kumar    Admin
1       2     David Lee   Editor
2       3      Lisa Ray   Author

3.仅从CSV文件中读取特定的列

我们可以指定" usecols"参数来从CSV文件中读取特定的列。
当CSV文件包含许多列但我们仅对其中几列感兴趣时,这将非常有用。

import pandas

emp_df = pandas.read_csv('employees.csv', usecols=['Emp Name', 'Emp Role'])

print(emp_df)

输出:

Emp Name Emp Role
0  hyman Kumar    Admin
1     David Lee   Editor
2      Lisa Ray   Author

4.读取没有标题的CSV文件

不一定要在CSV文件中包含标题行。
如果CSV文件没有标题行,我们仍然可以通过将`header = None'传递给read_csv()函数来读取它。

假设我们的employee.csv文件包含以下内容。

1,hyman Kumar,Admin
2,David Lee,Editor

让我们看看如何将此CSV文件读取到DataFrame对象中。

import pandas

emp_df = pandas.read_csv('employees.csv', header=None)

print(emp_df)

输出:

0             1       2
0  1  hyman Kumar   Admin
1  2     David Lee  Editor
2  3      Lisa Ray  Author

请注意,列标题是从0到N自动分配的。
我们可以在usecols参数中传递这些列值以读取特定的列。

import pandas

emp_df = pandas.read_csv('employees.csv', header=None, usecols=[1])

print(emp_df)

输出:

1
0  hyman Kumar
1     David Lee

5.在CSV文件中指定标题行

我们还可以为标题值指定行。
标头行之前的任何行都将被丢弃。
假设CSV文件包含以下数据。

# some random data
invalid data
Emp ID,Emp Name,Emp Role
1,hyman Kumar,Admin
2,David Lee,Editor
3,Lisa Ray,Author

标头数据位于第三行。
因此,我们必须传递" header = 2"来从文件中读取CSV数据。

import pandas

emp_df = pandas.read_csv('employees.csv', header=2)

print(emp_df)

输出:

Emp ID      Emp Name Emp Role
0       1  hyman Kumar    Admin
1       2     David Lee   Editor
2       3      Lisa Ray   Author

6.跳过CSV行

我们可以传递skiprows参数来跳过CSV文件中的行。
假设我们要从原始CSV文件中跳过第三行和第四行。

import pandas

emp_df = pandas.read_csv('employees.csv', skiprows=[2, 3])

print(emp_df)

输出:

Emp ID      Emp Name Emp Role
0       1  hyman Kumar    Admin

7.为Pandas 指定解析器引擎read_csv()函数

假设我们的CSV文件分隔符为" ##",即多个字符。

Emp ID##Emp Name##Emp Role
1##hyman Kumar##Admin
2##David Lee##Editor
3##Lisa Ray##Author

让我们看看尝试读取此CSV文件时会发生什么。

import pandas

emp_df = pandas.read_csv('employees.csv', sep='##')

print(emp_df)

输出:

/Users/hyman/Documents/PycharmProjects/AskPython/hello-world/theitroad/pandas/pandas_read_csv.py:5: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'.
emp_df = pandas.read_csv('employees.csv', sep='##')
 Emp ID      Emp Name Emp Role
0       1  hyman Kumar    Admin
1       2     David Lee   Editor
2       3      Lisa Ray   Author

我们可以通过在read_csv()函数中指定" engine"参数来避免该警告。

emp_df = pandas.read_csv('employees.csv', sep='##', engine='python')

有两个解析器引擎– c和python。
C解析器引擎更快且默认,但python解析器引擎功能更完善。