第二章Pandas数据读取(Pandas精通之路)

第一章 Python数据格式及使用介绍 第二章 Pandas-各类型文件数据读取 第三章 Pandas-数据的简单加工 第四章 Pandas-聚合与透视 第五章 Pandas-数据合并的多种方式 第六章 Pandas-数据的保存

提示:本系列重在介绍Pandas使用方法,未提供Anaconda、Pycharm等Python编辑器的安装方法。

Pandas在数据清洗中的重要性不言而喻。本文将介绍以Pandas为核心的数据读取(不限于Pandas),Pandas其他功能可见本人《Pandas精通之路》系列其他文章。

1)Excel数据读取

import pandas as pd

data = pd.read_excel(path)

data.tail(10)

data.shape

data = pd.read_excel(path, sheet_name=None)
sheet_names = data.keys()
sheet_data = data.values()

(可跳过)补充用例1:不改变表1数据格式,将表2和表3数据汇总进表1

import pandas as pd
import openpyxl as op

path = ['表1', '表2' ,'表3']

step = 4

book = op.load_workbook(path[0])

writer = pd.ExcelWriter(path[0], engine='openpyxl')

writer.book = book

writer.sheets = dict((ws.title, ws) for ws in book.worksheets)

sheet = book.worksheets[0]
row_mc_str = sheet.max_row
for fn in file[1:]:
    data = pd.read_excel(fn, index_col=0)
    data.to_excel(writer, sheet_name=sheet.title, startrow=row)
    row += step

writer.save()
writer.close()

2)csv数据读取


data = pd.read_csv(path, engine='python')

data = pd.read_csv(path, engine='python', encoding='utf-8')

dateparse = lambda dates: pandas.datetime.strptime(dates, '%Y%m%d')

data = pandas.read_csv(
    './data.csv',
    parse_dates=['时间'],
    date_parser=dateparse,
    index_col='时间'
    )

1)MySQL数据读取

import pymysql
import pandas as pd

password = input('请输入密码:')

conn = pymysql.connect(host='localhost',user='root',passwd=password ,db='test',port=3306,charset='utf8')

sql_cmd = """
        select * from table where city='迪拜'
"""

data = pd.read_sql(sql_cmd,conn)

2)Postgres数据读取

import psycopg2

conn = psycopg2.connect(
    database="postgres",
    user="postgres",
    password="pd",
    host="localhost",
    port="5432")
conn.set_client_encoding("utf-8")

cur = conn.cursor()

cur.execute("""%s""" % sql)
result = cur.fetchall()

conn.commit()
cur.close()
conn.close()

result = pd.DataFrame(result)

3)其他类型数据库

大同小异,核心都是找到对应的数据读取包,不再一一举例

1)txt、sql、del等文件读取

1.规整的表格数据,可通过 pd.read_csv方法读取为 DataFrame格式数据;其中 header=None是无列名称,否则会将第一行作为列名称, names是指定的列名, sep是分割符,默认为逗号,具体视实际数据分割方式而定。

import pandas as pd
data = pd.read_csv('数据.txt',
                    header=None,
                    names=['日期', '分类', '类型'],
                    sep=' '
                    )
print(data)

输出结果示例

         日期  分类 类型
0  20220101   1  大
1  20220102   1  中
2  20220103   1  大
3  20220104   1  大
4  20220105   1  小
5  20220106   1  大
6  20220107   1  小

2.非表格数据(不限于txt)使用 with open()方式读取, read()结果为 strreadlines()结果为 list

with open("data.txt", encoding='utf-8') as f:
    data = f.read()
    print(type(data))
    print(data)

输出结果

<class 'str'>
20220101,1,大
20220102,1,中
20220103,1,大
20220104,1,大
20220105,1,小
20220106,1,大
20220107,1,小

sql文件读取

with open("data.sql", encoding='utf-8') as f:
    data = f.readlines()
    print(type(data))

for d in data:
    print(d)

输出结果

<class 'list'>
create table dark

(

    ....

)

distributed by ()

partition by range(dt)

    (

    START ('2010-01-01'::date) END ('2041-12-31'::date) EVERY ('1 mon'::interval)

    )
;

3.del等其他类型文件方法基本相同,不一一列举

2)dat文件读取

1.表格类数据 pd.read_table()方法读取;
2.非表格数据 with open()同txt文件,不赘述。

import pandas as pd

data = pd.read_table('file_nm.dat', sep='\|@\|', header=None)

data.tail(10)

3)json数据读取

import pandas as pd

data = pd.read_json('data.json', orient='table')

print(data)

print(type(data))

原json格式数据

{
    "schema": {
        "fields": [{
            "name": "index",
            "type": "integer"
        }, {
            "name": "col 1",
            "type": "string"
        }, {
            "name": "col 2",
            "type": "string"
        }],
        "primaryKey": ["index"],
        "pandas_version": "0.20.0"
    },
    "data": [{
        "index": 0,
        "col 1": "a",
        "col 2": "b"
    }, {
        "index": 1,
        "col 1": "c",
        "col 2": "d"
    }]
}

输出结果

col 1 col 2
0     a     b
1     c     d
<class 'pandas.core.frame.DataFrame'>
import pandas as pd
import json

with open('data.json', encoding='utf-8') as f:
    data = f.read()

data = json.loads(data)

df = pd.json_normalize(data)

print(df)

输出结果

    id        name  fitness.height  fitness.weight
0  1.0   Cole Volk             130              60
1  NaN    Mark Reg             130              60
2  2.0  Faye Raker             130              60

3.(比官网增加个难度的json)复杂json的展平操作

import pandas as pd
import json

with open('data.json', encoding='utf-8') as f:
    data = f.read()

data = json.loads(data)

df = pd.json_normalize(
    data,

    record_path=['result', 'counties'],

    meta=[['result', 'state'],
    ['result', "shortname"],
    ['result', 'info', 'governor']],

    sep='_'
)

df.rename(columns={
    'result_state': 'state',
    'result_shortname': 'shortname',
    'result_info_governor': 'info_governor'
}, inplace=True
)

输出结果

        name  population    state shortname info_governor
0        Dade       12345  Florida        FL    Rick Scott
1     Broward       40000  Florida        FL    Rick Scott
2  Palm Beach       60000  Florida        FL    Rick Scott
3      Summit        1234     Ohio        OH   John Kasich
4    Cuyahoga        1337     Ohio        OH   John Kasich

本文介绍了pandas读取各类文件数据的方法,其中最为常用的是Excel、csv和DataBase数据的读取;另外也介绍了txt、dat、sql等类型数据的读取,方法大同小异;最后结束了json数据的读取,基本是结合官网数据变形而来,主要在于读取(官网只介绍了转换)。

*声明:本文所载信息不保证准确性和完整性。文中所述内容和意见仅供参考,不构成实际商业建议,如有雷同纯属巧合。

Original: https://blog.csdn.net/LMTX069/article/details/122448642
Author: 赫加青空
Title: 第二章Pandas数据读取(Pandas精通之路)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/601118/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球