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
state | year | |
---|---|---|
pop | ||
1.5 | Ohio | 2000 |
1.7 | Ohio | 2001 |
3.6 | Ohio | 2002 |
2.4 | Nevada | 2001 |
2.9 | Nevada | 2002 |
案例:表头为‘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"])