【python】pandas常见文件读取方法

pandas是一个强大的Python数据分析库,它提供了多种读取文件的方法,支持多种文件格式。以下是pandas中常见的一些文件读取方法及其详细说明、常用参数、代码示例和数据示例。


1. read_csv()

(1)用途:

读取 CSV(Comma Separated Values)文件。

(2)常用参数:
  • filepath_or_buffer:文件路径或类似文件的对象。
  • sepdelimiter:字段分隔符,默认为逗号,
  • header:用作列名的行号,默认为0(即第一行)。
  • index_col:用作行索引的列编号或列名。
  • dtype:每列的数据类型。
  • nrows:需要读取的行数。
(3)代码示例:
import pandas as pd

# 读取 CSV 文件
df = pd.read_csv('data.csv')

# 显示数据的前几行
print(df.head())
(4)数据示例 (data.csv):
Name,Age,City
Alice,25,New York
Bob,30,San Francisco
Charlie,35,Los Angeles
(5)header参数基本用法

在Pandas库中,read_csv函数的header参数用于指定用作列名的行号或处理表头的方式。关于header参数的详细解释:

  1. 默认行为:当不指定header参数时,其默认值为0,表示将CSV文件中的第一行(索引为0的行)作为列名(表头)。

  2. 指定行号:如果CSV文件中的列名不在第一行,而是位于其他行,可以通过设置header参数为相应的行号(从0开始计数)来指定。例如,header=1表示将第二行作为列名。

  3. 多行表头:在某些情况下,CSV文件可能使用多行来定义列名。此时,可以将header参数设置为一个列表,例如header=[0,1],表示将第一行和第二行的内容合并作为列名。但请注意,这种方式在Pandas中并不常用,因为它可能会导致列名变得复杂且难以理解。

  4. 无表头:如果CSV文件没有包含列名,可以将header参数设置为None。在这种情况下,Pandas将自动生成默认的列名,如0, 1, 2,…。

示例1:无表头,自定义列名

假设CSV文件内容如下(没有列名):

Alice,25,New York
Bob,30,Los Angeles

我们可以设置header=None并自定义列名:

df = pd.read_csv('example_without_header.csv', header=None, names=['Name', 'Age', 'City'])
print(df.head())

输出:

  Name  Age       City
0  Alice   25   New York
1    Bob   30  Los Angeles
示例2:无表头,不自定义列名

使用 header=None 但是不自定义列名:
header 设置为 None 时,并且不指定列名,在这种情况下,Pandas 会自动生成默认的列名,通常是 0, 1, 2, ... 等数字。

import pandas as pd

```python
df = pd.read_csv('example_without_header.csv', header=None)
print(df.head())

输出:

  0       1       2
0  Alice   25   New York
1    Bob   30  Los Angeles

其中,0, 1, 2, ... 是Pandas自动生成的列名。

2. read_table()

(1)用途:

读取类似表格的数据,如 TSV(Tab Separated Values)文件。

(2)常用参数:
  • filepath_or_buffer:文件路径或类似文件的对象。
  • sepdelimiter:字段分隔符,默认为制表符\t
  • 其他参数与 read_csv() 类似。
(3)代码示例:
import pandas as pd

# 读取 TSV 文件
df = pd.read_table('data.tsv', delimiter='\t')

# 显示数据的前几行
print(df.head())
(4)数据示例 (data.tsv):
Name	Age	City
Alice	25	New York
Bob	30	San Francisco
Charlie	35	Los Angeles

3. read_excel()

(1)用途:

读取 Excel 文件(.xlsx 或 .xls)。

(2)常用参数:
  • io:文件路径或类似文件的对象。
  • sheet_name:要读取的工作表名称或索引,默认为0(即第一个工作表)。
  • header:用作列名的行号,默认为0。
  • dtype:每列的数据类型。
  • engine:用于解析 Excel 文件的引擎,如openpyxl(用于 .xlsx)或xlrd(用于较旧的 .xls)。
(3)代码示例:
import pandas as pd

# 读取 Excel 文件
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 显示数据的前几行
print(df.head())
(4)数据示例 (data.xlsx - Sheet1):

与 CSV 数据类似,但存储在 Excel 文件中。


4. read_json()

(1)用途:

读取 JSON(JavaScript Object Notation)文件或 JSON 格式的字符串。

(2)常用参数:
  • path_or_buf:文件路径或 JSON 格式的字符串。
  • orient:指定 JSON 数据的结构,如'split''records'等。
  • dtype:每列的数据类型。
  • lines:是否按行读取 JSON 数据。
(3)代码示例:
import pandas as pd

# 从字符串读取 JSON 数据
json_data = '''
[
  {"Name": "Alice", "Age": 25, "City": "New York"},
  {"Name": "Bob", "Age": 30, "City": "San Francisco"},
  {"Name": "Charlie", "Age": 35, "City": "Los Angeles"}
]
'''
df = pd.read_json(json_data)

# 显示数据
print(df)
(4)数据示例 (JSON 字符串):

见上述 JSON 字符串。


5. read_html()

(1)用途:

从网页或HTML字符串中读取表格数据,并返回一个包含DataFrame对象的列表。

(2)常用参数:
  • io:URL、文件路径或HTML字符串。
  • match:用于匹配表格的正则表达式字符串或正则表达式对象。
  • attrs:字典或列表,用于识别表格的属性,如{'id': 'table_id'}
  • parse_dates:将某些列解析为日期。
  • header:用作列名的行号,默认为0(如果未找到,则使用None)。

(3)Python 代码示例

使用pandasread_html()函数来解析这个HTML字符串中的表格:

import pandas as pd

# 从网页URL读取HTML表格
url = 'https://example.com/page-with-tables'
dfs = pd.read_html(url, match='Table Title')  # 假设表格有'Table Title'这样的属性或文本

# 由于我们只有一个表格,所以直接取第一个DataFrame
df = dfs[0]

# 显示数据
print(df)

运行上述代码,你应该会得到以下输出(DataFrame的格式化显示):

     Name  Age            City
0   Alice   25        New York
1     Bob   30  San Francisco
2  Charlie   35    Los Angeles

(4)HTML 字符串示例

假设我们有一个简单的HTML字符串,它包含了一个表格:

html_string = '''
<html>
<head>
    <title>Sample HTML Table</title>
</head>
<body>
    <table border="1">
        <thead>
            <tr>
                <th>Name</th>
                <th>Age</th>
                <th>City</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Alice</td>
                <td>25</td>
                <td>New York</td>
            </tr>
            <tr>
                <td>Bob</td>
                <td>30</td>
                <td>San Francisco</td>
            </tr>
            <tr>
                <td>Charlie</td>
                <td>35</td>
                <td>Los Angeles</td>
            </tr>
        </tbody>
    </table>
</body>
</html>
'''

请注意,read_html()通常用于从网页中提取表格数据,但由于网页结构和内容可能会动态变化,因此通常建议使用更稳定的数据源,如CSV、Excel或JSON文件。

注意事项:
  • read_html()可能不适用于所有网页和所有表格,因为它依赖于Pandas解析HTML的能力,这可能会受到HTML结构复杂性的影响。
  • 如果要处理的网页需要登录或其他形式的身份验证,可能需要使用如requests库之类的工具来获取网页内容,然后再将其传递给read_html()
  • read_html()返回的是一个包含DataFrame对象的列表。
  • 25
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值