pandas-直接上手操作
创建数据
# 列表创建================== data = [[1, 2, 3], [6, 5, 4], [7, 8, 9]] columns = ["第一列", "第二列", "第三列"] df = pd.DataFrame(data, columns=columns)
# 字典创建================== data = { "A": [1, 2, 3], "B": "ok", "C": "C" } df = pd.DataFrame(data)
读取文件
#读取指定文件(其他文件类似):文件名称, 列名称, 表头, 跳过那些行不读取 df = pd.read_excel(path, sheet_name="", usecols="", header=0,skiprows=[3,6]) df = pd.read_excel(sheetname="a" 或者 sheetname=["a","b"] 单个数据:直接传值, 多个数据:传列表即可 #转为二维列表:只转某列或者转换整个Dataframe list(df) == df.values.tolist() list(df["grammer"]) == df["grammer"].values.tolist()
查看Dataframe基础信息
df.dtypes
df.columns
df.index
df.values
df.describe()
快速查看-首尾的-行数据
# 括号内可以传参,T 是转置 df.head() df.tail() df.T
查看修改:行数据,列数据,值数据
# 选择列数据,一列或者多列 df["A"] df[["A", "B"]] # 选择行数据-切片:包头不包尾部:index df[0:1] df.iloc[2].values.tolist() # 从中间切一部分:行:列==index:columns df.loc[:, ["A", "C"]] # 只取值列数据,行数据全取 df.loc[2, "C"] # 十字坐标取值 df.at[0, "C"] # 十字坐标取值 df.iloc[0:2, 1:3] df.iloc[:, 1:3] df.iloc[1:4, :] # 只取值行数据,列数据全取 df.iloc[[1, 2, 4], [2, 5]] df.iloc[1, 1] # 十字坐标取值 # 原地修改数据:修改单个值 df.at[0,"A"] = 999 df.iat[0, 0] = 999 # 原地修改数据:修改列数据 df.loc[:, "D"] = [5] * 3
df[df>2] = -df # 纯数字表,可以直接取反
排序
df.sort_index(axis=1, ascending=False)
df = df.sort_values(by="A")
判断取值:数字用等号,字符串用in
# 两种写法,作用相等 res = df[df["A"] > 2] res = df[df.A > 2] res = df[df["B"].isin(["ok", "OK"])]
新增列数据
# 增加一个Dataframe 列数据 s1 = pd.DataFrame({"D": ["tom", "jerry", "jack"]}) df["D"] = s1
3.数据保存,保存文件
#其他格式:to_XX即可 df.to_excel(path, sheet_name)
4.读取数据:指定列,指定行
#提取指定列:参数为列名称===================================== df["grammer"] #提取指定行【方法一】:参数为列名称,行关键词==================== df[df["grammer"]=="python"] #提取含有python的行,参数:列名称,关键词 #提取指定行【方法二】:参数为列名称,行关键词==================== res = df["grammer"].str.contains("python") #找到bool值,获取含有True的行 res.fillna(value = False, inplace=True) df[res] #提取指定行【方法三】:参数为,指定行号,也可以list成列表========= res = df.loc[3] list(res) #读取开头或者尾部数据(和shell的使用相似)可以指定显示行数======== df.tail(3) df.head(3)
5.获取表格的大小,行数,列数,数据类型,类型转换
# 查看表头: ['grammer', 'score'] list(df.columns) == df.columns.values # 查看表index列:[0, 1, 2, 3, 4, 5, 6, 7] list(df.index) == df.index.values #获取数组形状:几行几列,返回元祖类型(2,3) df.shape
df.shape[0] # 返回行数, [1]返回列数 df.info() #显示索引,数据类型,内存信息 df.dtypes #查看每列的数据类型 df["score"].astype(np.int64) df["score"].astype("int") #列数据类型转换,数据类型多为64 df.size df.values df.T pd.__version__ :获取版本号
6.修改列名称,设置列索引
df.rename(columns={"score":"popularity"},inplace = True)#修改列名称
df
df.set_index("score") #设置某列为索引
7.统计元素的出现次数,列统计
df["grammer"].value_counts() df.grammer.value_counts #两种方法一致 df.value_counts() #全表的统计 # 参数:列名称, 注意小括号 len(df[df["score"]>8]) #统计某列,数据大于8的次数个数
df.score.nunique()
#查看某列共有几种数据,相当于去重后,统计个数
8.空值填充:用上下文的平均值填充【空值填充】
df["popularity"] = df["popularity"].fillna(df["popularity"].interpolate()) df["grammer"] = df["grammer"].fillna("R") #给指定列填充空值(填充为R) df.isnull().values.any() #检查数据中是否有空值【返回有TRUE或者无FALSE】 df["A].fillna(method="pad", inplace=True) # 使用上文对下文进行填充 # all:整行为空值,即删除空行,any:只有有一个空值,就删除行, # axis:0为行,1为列 # subset: 指定列中找缺失值 df.dropna(how="all", axis=0, subset=["a", "b"]) # nan值转为空字符,等于replace """ value:填充替换为的值 method:pad、ffill前值填充, backfill、bfill 后值填充 limit: 限定个数 """ df.fillna(value, method, axis=None, inplace=True, limit=None) df.replace() df.str.replace()
df.dropna() # 删除包含空值的全部行
df.dropna(subset=["列名"], inplace=True, how="all")
9.条件取值:判断后,提取满足条件的值
#提取列中值大于3的行================================== res = df["popularity"]>3 df[res] #也可以写成一行代码 df[df["popularity"]>3] #提取大于3,小于7的数据=============================== res1 = df["popularity"] < 7 res2 = df["popularity"] >3 df[res1 &res2] #写成一行代码,注意加上小括号 df[(df["popularity"] < 7) & (df["popularity"] >3)] # str.contains包含某值,等于 in 方法 df[(df["a"].str.contains("#"))] df[~(df["a"].str.contains("#"))] # 取反,等于 not in # 是否包含值: hello word df.isin(["hello", "word"])
10.按照列去重
df.drop_duplicates(["grammer"])
11.求指定列的最大值,最小值,平均值,中位数,最值方差
df["score"].mean() df["score"].min() df["score"].max() #不加小括号,则显示列的全部值,方法不生效 np.median(df["score"]) #平均值 #获取最大值,所在行数据========================== res = df["popularity"]==df["popularity"].max() df[res] #写成一行 df[df["popularity"]==df["popularity"].max()] #计算某列最大值与最小值之差 df[["score"] ].apply(lambda x:x.max()-x.min()) np.ptp(df["score"])
12.拼接数据,合并数据concat
#拼接第一行和最后一行 pd.concat([df[:1], df[-2:-1]])
df = pd.concat([df1,df2), axis=1)
df
13.合并两列数据,合并数据,列相减,列相加
df["new"] = df["score"] + df["grammer"] df["new"] = df["score"] - df["grammer"] df["new"] = df["score"].map(str) + df["grammer"].map(str) df #合并两列数据为新的一列【需要先去除空值,转为同类型,才能相加】
14.交换两个列的位置
res = df.columns[[1,0]] df[res] #只有第一步,不会生效,只是展示
15.添加数据
# 添加数据append,括号内指的是第八行数据 df.append(df.iloc[7])
16.空值处理
17.删除数据,删除最后一行数据
df.drop([len(df)-1], inplace=True) #删除最后一行,依据行号 del df["列名称"] #删除列 df.drop(columns=["score"], inplace=True) #删除列
18.排序
df.sort_values("score",inplace=False, ascending=False) #inplace是否修改原表,ascending升降序
19.新增数据
#生成指定长度的数据,randint(开始,结束,个数) pd.DataFrame(pd.Series(np.random.randint(1,10,8)))
20.计算某列的长度,并生成新列
df["len_str"] = df["grammer"].map(lambda x: len(x)) """ 1.空值填充后处理 2.增加新列 3.使用map和lambda来计算长度 """
21.pandas的str处理方法
22.修改列数据:对指定列数据,进行转换修改
#方法一:===================== def func(df): lst = df["score"] df["new_score"] = lst*100 return df func(df) df #方法二:===================== def func(df): lst = df["score"] df["new_score"] = lst*100 return df df = df.apply(func, axis=1) df
23.根据指定列,进行分组计算平均值
print(df.groupby("grammer").mean()) """ score len_str new_score grammer R 5.0 1.0 500.0 c 2.0 1.0 200.0 c++ 10.0 3.0 1000.0 go 4.0 2.0 400.0 java NaN 4.0 NaN php 7.0 3.0 700.0 python 1.0 6.0 100.0 sql 66.0 3.0 6600.0 """
24.对列中的时间进行转换
for i in range(len(df)): df.ix[i, 0] = df.ix[i,0].topydate("%Y-%m-%D %H-%M-%S") #先遍历,再转换。
25.对数值型的列,进行汇总统计
df.describe() #对数值型的列,自动统计
26.新增一列,根据某列,将数据分组
data = [0,3,6,10] #四个数值,分为三段 gropname = ["低","中","高"] #本行和上面一行,数量要对应 df["分组"] = pd.cut(df["score"], data, labels=gropname) df
27.绘制某列的频率直方图
import matplotlib.pyplot as plt df.score.plot(kind="hist")
28.绘制某列的水平密度曲线,类似于正态分布图
df.score.plot(kind="kde", xlim=(0,8)) #score是某列的名称
29.增加行数据的两种方法
import pandas as pd # 方法一:concat=================================== def pandas_append(df, data_list): """给df新增行数据:data_list""" if isinstance(data_list, list): new_data = {key: [data_list[num]] for num, key in enumerate(list(df))} df2 = pd.DataFrame(new_data) new_df = pd.concat([df, df2], ignore_index=True) return new_df print(f"{data_list}不是列表数据,请检查!!") df1 = pd.DataFrame( {"name": ["tome", "jerry"], "age": [22, 33]} ) print(df1) data = ["peper", 44] res = pandas_append(df1, data) print(res) # 方法二:append=================================== df1.append({"name":"alice","age":11}) print(df1)

浙公网安备 33010602011771号