欢迎访问我搞事情的【知乎账号】:Coffee
以及我的【B站漫威剪辑账号】:VideosMan
若我的笔记对你有帮助,请用小小的手指,点一个大大的赞哦。
关于DataFrame的相关知识,我还进行了汇总,欢迎点赞收藏!!
【Python学习笔记—保姆版】第四章—关于Pandas、数据准备、数据处理、数据分析、数据可视化
import pandas as pd
import pandas as Series
import numpy as np
from pandas import DataFrame
pandas:生成数据框,处理数据框
import pandas as pd
DataFrame、Series
numpy:一些特殊的数值,可视化的使用
import numpy as np
比如
方法 | 解释 |
---|---|
np.nan | 空值(缺失值) |
np.inf | 无穷( -inf 或 +inf ) |
np.arange(16) | 返回一个有终点和起点的固定步长的排列 |
np.random | 生成随机数 |
np.array([1,2,3,4]) | 返回一个自定义的排列 |
方法 | 效果 |
---|---|
numpy.size | 人数 |
numpy.mean | 平均值 |
numpy.var | 方差 |
numpy.std | 标准差 |
numpy.max | 最高分 |
numpy.min | 最低分 |
>>> from pandas import DataFrame
>>> df = DataFrame(np.arange(16).reshape(4,4),index=['a','b','c','d'],columns =['one','two','three','four'])
>>> df
one two three four
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
>>> data = {'a':[5,8],'b':[1,0]}
>>> df = DataFrame(data)
>>> df
a b
0 5 1
1 8 0
同时也可以指定列索引序列
>>> df = DataFrame(data,columns = ['b','a'])
>>> df
b a
0 1 5
1 0 8
其中我们可以知道,外层键是列索引,内层子键是行索引
>>> nest_dict={'shanghai':{2015:100,2016:101},'beijing':{2015:102,2016:103}}
>>> df = DataFrame(nest_dict)
>>> df
shanghai beijing
2015 100 102
2016 101 103
>>> nest_dict={'shanghai':{2015:100,2016:101},'beijing':{2015:102,2014:103}}
>>> df = DataFrame(nest_dict)
>>> df
shanghai beijing
2014 NaN 103.0
2015 100.0 102.0
2016 101.0 NaN
想偷懒,这里直接引用一下别人写的漂亮文章
(1 封私信 / 4 条消息) dataframe修改某列的值 - 搜索结果 - 知乎 (zhihu.com)
(20条消息) pandas:dataframe在指定位置插入一行数据_碧海蓝天-CSDN博客_dataframe插入一行数据
(22条消息) Python中pandas dataframe删除一行或一列:drop函数_海晨威-CSDN博客_dataframe drop
原始数据
df['Hefei'] = 1 df
shanghai beijing Hefei
2014 NaN 103.0 1
2015 100.0 102.0 1
2016 101.0 NaN 1
利用loc方法,当然也可以使用append方法,不过传入的需要是字典形式。
>>> df.loc[4]={'shanghai':5,'beijing':13, 'Hefei':50}
>>> df
shanghai beijing Hefei
2014 NaN 103.0 1
2015 100.0 102.0 1
2016 101.0 NaN 1
4 5.0 13.0 50
>>> df.loc[2]={'shanghai':5,'beijing':13, 'Hefei':50}
>>> df
shanghai beijing Hefei
2014 NaN 103.0 1
2015 100.0 102.0 1
2016 101.0 NaN 1
4 5.0 13.0 50
2 5.0 13.0 50
>>> df.drop('Hefei',axis = 1,inplace = True)
>>> df
shanghai beijing
2014 NaN 103
2015 100 102
2016 101 NaN
4 5 13
2 5 13
3 5 13
df.drop(3,axis = 0,inplace = True)
>>> df
shanghai beijing
2014 NaN 103
2015 100 102
2016 101 NaN
4 5 13
2 5 13
改操作主要记住就是从列开始
>>> df
shanghai beijing
2014 6 6
2015 100 102
2016 101 NaN
4 5 13
2 5 13
>>> df[:3]
shanghai beijing
2014 6 6
2015 100 102
2016 101 NaN
>>> df[1] = 3
>>> df
shanghai beijing 1
2014 6 6 3
2015 100 102 3
2016 101 NaN 3
4 5 13 3
2 5 13 3
df.info(): # 打印摘要
df.describe(): # 描述性统计信息
df.values: # 数据
df.to_numpy() # 数据 (推荐)
df.shape: # 形状 (行数, 列数)
df.columns: # 列标签
df.columns.values: # 列标签
df.index: # 行标签
df.index.values: # 行标签
df.head(n): # 前n行
df.tail(n): # 尾n行
pd.options.display.max_columns=n: # 最多显示n列
pd.options.display.max_rows=n: # 最多显示n行
df.memory_usage(): # 占用内存(字节B)
np.random.seed(1234)
d1 = pd.Series(2*np.random.normal(size = 100)+3)
d2 = np.random.f(2,4,size = 100)
d3 = np.random.randint(1,100,size = 100)
d1.count() #非空元素计算
d1.min() #最小值
d1.max() #最大值
d1.idxmin() #最小值的位置,类似于R中的which.min函数
d1.idxmax() #最大值的位置,类似于R中的which.max函数
d1.quantile(0.1) #10%分位数
d1.sum() #求和
d1.mean() #均值
d1.median() #中位数
d1.mode() #众数
d1.var() #方差
d1.std() #标准差
d1.mad() #平均绝对偏差
d1.skew() #偏度
d1.kurt() #峰度
d1.describe() #一次性输出多个描述性统计指标
np.nan #赋空值
df['a']#取a列
df[['a','b']]#取a、b列
# 前n行,后n行
df.head(n)
df.tail(n)
#iloc只能用数字索引,不能用索引名------(左闭右开)
df.iloc[0:2]#前2行
df.iloc[0]#第0行
df.iloc[0:2,0:2]#0、1行,0、1列
df.iloc[[0,2],[1,2,3]]#第0、2行,1、2、3列
# 选取等于某些值的行记录 用 ==
df.loc[df['column_name'] == some_value]
# 选取某列是否是某一类型的数值 用 isin
df.loc[df['column_name'].isin(some_values)]
# 多种条件的选取 用 &
df.loc[(df['column'] == some_value) & df['other_column'].isin(some_values)]
# 选取不等于某些值的行记录 用 !=
df.loc[df['column_name'] != some_value]
# isin返回一系列的数值,如果要选择不符合这个条件的数值使用~
df.loc[~df['column_name'].isin(some_values)]
#提取出某行某列
li=list(df.columns)
df.iloc[[3,4,8],[li.index('animal'),li.index('age')]]
#iat取某个单值,只能数字索引df.iat[1,1]#第1行,1列#at取某个单值,只能index和columns索引df.at[‘one’,‘a’]#one行,a列
# 要删除列“score”<50的所有行:
df = df.drop(df[df.score < 50].index)
df = df.drop(df[df['score'] < 50].index)
df.drop(df[df.score < 50].index, inplace=True)
df.drop(df[df['score'] < 50].index, inplace=True)
# 多条件情况
# 可以使用操作符: | 只需其中一个成立, & 同时成立, ~ 表示取反,它们要用括号括起来。
# 例如删除列“score<50 和>20的所有行
df = df.drop(df[(df.score < 50) & (df.score > 20)].index
点击查看更多内容
比如我想查看id等于11396的数据。
pdata1[pdata1['id']==11396]
pdata1[pdata1.id==11396]
查看时间time小于25320的数据。
pdata1[pdata1['time']<25320]
pdata1[pdata1.time<25320]
查看time小于25320且大于等于25270的数据
pdata1[(pdata1['time'] < 25320)&(pdata1['time'] >= 25270)]
可以根据筛选条件查看某几列
pdata1[(pdata1['time'] < 25320)&(pdata1['time'] >= 25270)][['x','y']]
注意多个条件要加括号后在&或|。
点击查看更多内容
#表示pd按照xxx这个字段排序,inplace默认为False,如果该值为False,那么原来的pd顺序没变,只是返回的是排序的
pd.sort_values("xxx",inplace=True)
从excel导入
from pandas import read_excel
df = read_excel('e://rz2.xlsx')
df
从csv导入
from pandas import read_csv
path4 = 'C:\\Users\\admin\\Desktop\\大数据爬虫2\\合并\\主键外连接.csv'
df5 = read_csv(path4,engine='python')