Skip to content

pandas 数据读取

python
import pandas as pd
python
# 把某个文件路径设定给变量fpath
fpath = "./abcd/xxxx.csv"
python
# 读取数据
ratings = pd.read_csv(fpath) # 读取csv;txt文件
ratings_e = pd.read_excel(fpath) # 读取excel文件
python
# 查看前几行数据
ratings.head()
python
# 查看数据的行列数(形状)
ratings.shape
python
# 查看表头(所有的列名列表)
ratings.colums
python
# 查看索引列 (第一列从0开始的数列)
ratings.index
python
# 查看每列的数据类型
ratings.dtypes

数据类型包含:

  • int64;

  • float64;

  • object

案例:打开用tab键(\t)作为制表符的 无表头的二维数据的 txt文件

并自己指定表头 分别为 date;where;name

python
read1 = pd.read_csv(
    fpath,
    sep="\t",
    header=None,
    names=['date', 'where','name' ]
    )

读取mySQL数据库

python
import pymysql
python
conn = pymysql.connect(
    host = '127.0.0.1',
    user = 'root',
    password = '12345678',
    database = 'test',  # database: 设置数据库名称为test
    charset = 'utf8'
    )
python
read_mysql = pd.read.sql("select * from crazyant_pvuv", con=conn) # 从名为"crazyant_pvuv"的数据库表中选择所有列的数据

pandas 数据结构

DataFrame 二维数据

根据多个字典创建DataFrame

python
data = {
    'state':[' Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
    'year': [2000,2001,2002,2001,2002],
    'pop':[1.5,1.7,3.6,2.4,2.9]
}
df1 = pd.DataFrame(data)

查询多行数据

python
df1.loc[1:3]

Series 一维数据

python
# 生成一个series   注意: Series 必须首字母大写
s1 = pd.Series([1,'a',5.2,7])
python
s1

输出

0      1
1      a
2    5.2
3      7
dtype: object
python
# 获取索引  s1.index
#获取数据   s1.values

创建一个具有指定标签索引的index

python
s2 = pd.Series([1,'a',5.2,7], index = ['a', 'b', 'c', 'd'])

使用python字典创建series

python
sdata = {'a':1200, 'b':2400, 'c':3600}   #创建ptyhon字典
s3 = pd.Series(sdata)

pandas 四种数据查询方法

loc 数值查询

python
df1.set_index('pop', inplace=True)  # inplace=True 表示在原始的dataFrame 上进行修改,而不是新建一个dataframe
df1
stateyear
pop
1.5Ohio2000
1.7Ohio2001
3.6Ohio2002
2.4Nevada2001
2.9Nevada2002

案例:表头为‘wendu’列的数据全部有单位 ‘℃’ 将其全部擦除掉。

python
anlishuju.loc[:,"wendu"] = anlishuju["wendu"].str.replace("℃", "").astype('int32')
# :,"wendu"  :表示筛选出所有行  并且筛选出表头为wendu 的列

使用单个label 值 或 值列表 进行查询

python
# 得到单个值;series,DataFrame   用索引和表头进行交叉定位
df.loc['索引值', '表头']
df.loc[['索引值a','索引值b'],['表头a', '表头b']]  # 可以得到

使用数值区间进行范围查询

注意:区间既包含开始 也包含结束

python
# 行 index 按区间
df.loc['2018-01-03':'2018-01-13','wendu']  # 查询20180103到0113号的 温度
# 列 index 按区间
df.loc['2018-01-03','xxxxx':'wendu']

使用条件表达式进行查询

案例: 查询最低温度低于-10 ℃ 的列表

python
df.loc [df["wendu"]< -10, :]

调用函数查询

python
# 直接写lambda 表达式
df.loc[lambda df : (df["wendu"]<=30)&(df["wendu"]>=15), :]

案例:查询2018年九月份,空气质量为优的数据。

python
def query_my_data(df):
    return df.index.str.startswith("2018-09")&df["空气质量"]=='优'  
    # 注意 前提是日期已经被设置成index索引
    # str.startswith :用于检查字符串是否以指定 xxxx 开头
df.loc[query_my_data, :]

pandas 新增数列

直接赋值法

python
案例:有两列数据,最高温度 和最低温度 hwendu; lwendu  计算温差
python
#第一步,去除℃单位 并变成数字类型
df.loc[:,"lwendu"] = df["lwendu"].str.replace("℃", "").astype('int32')
df.loc[:,"hwendu"] = df['hwendu"].str.replace("℃", "").astype('int32')
#第二步 计算温差
df.loc[:,"wencha"] = df["hwendu"] - df["lwendu"]

df.apply 法

python
案例:添加一列温度类型:
1.最高温度大于33℃ 就是高温
2. 最低温度< -10 ℃ 就是低温
3. 否则就是常温
python
def get_wendu_type(x):
    if x["hwendu"] > 33:  return '高温',
    if x["lwendu"] < -10:  return '低温',
    return '常温'
# 注意 设定axis == 1   轴=1 为columns(列);   轴=0  为index: 行
df.loc[:, "wendu_type"] = df.apply(get_wendu_type, axis=1)
# 计数验证
df["wendu_type"].value_counts()

# 那么如何用apply 函数添加多列?
def 函数名称(x)
    列A, 列B = row['a']+row['b'], row['a']-row['b']
    return  列A, 列B
df[['列A', '列B']] = df.apply(函数名称, axis=1 result_type='expand')  #result_type='expand' 表示将结果展开为多个列

df.assign 法

python
案例: 将温度从摄氏度变成华氏度
python
# 可以同时添加多个新的列   assign 函数 返回的是一个新的对象
df.assign(
    hwendu_huashi = lambda x : x["hwendu"]*9/5 + 32,
    lwendu_huashi = lambda x : x["lwendu"]*9/5 + 32,
)
python
### 4.4 按条件选择分组分别赋值
python
案例: 高低温差大于10℃  则认为温差大 否则 温差正常
python
#先创建空列
df['wencha_type'] = ''
df.loc[df["hwendu"]-df['lwendu'] > 10, "wenhcha_type"] = "温差大"
df.loc[df["hwendu"]-df['lwendu'] <= 10, "wenhcha_type"] = "温差正常"

pandas 数据统计函数

汇总类统计

python
# 一次性提取所有数字列统计结果
df.describe()
python
有以下结果:
count:计数
mean:平均值
std:标准差
min:最小值
25%
50%
75%
max:最大值

唯一去重和按值计数

唯一性去重 一般不用于数值列,而是枚举、分类列

python
# 枚举
df["表头"].unique()

按值计数

python
# 统计每个值出现的次数
df["表头"].value_counts()

相关系数和协方差

用途: 1.两只股票,是不是同涨同跌? 程度多大?正相关还是负相关?

2.产品销量的波动,跟哪些因素正相关、负相关、程度有多大?

协方差:衡量同向、反向程度 结果为正:xy同向变化,协方差的绝对值越大,同向程度越高。

相关系数:衡量相似度程度,当他们的相关系数为1时,说明两个变量变化时的正向相似度最大,当相关系数为-1时,反向相似度最大

python
# 协方差矩阵
df.cov()

# 相关系数矩阵
df.corr()
python
案例: 查看空气质量(aqi) 和最高温度(hwendu)的相关系数
python
df["aqi"].corr(df["hwendu"])

© 2023-2024 LiuJingcheng. 保留所有权利。