1、多行pandas DataFrame在jupyter中完整显示?
import pandas as pd
pd.set_option('display.max_columns', None) #显示所有列
pd.set_option('display.max_rows', None) #显示所有行
显示部分行
pd.set_option('display.min_rows', 100)
2、统计某列中每个值出现的频率,并找出频率最多的值
count=df['time'].value_counts()
count.idxmax()
3、统计dataframe中某个字段特定值的数据
c_ip_223=faceB_data_v4.query("c_ip =='*'")
df.query("A==1 & B==4")
c_ip_223.query("sni=='*'| sni=='*'|sni=='*'")
4、jupyter备注字体标成红色
<font color = red>***</font>
<font color=#DC143C size=3 face="黑体"></font>
5、对字段进行分组数量统计
分组并统计字数
#法1,统计所有字段
data.groupby("place_id").count()
#法2,返回serise
data.groupby("place_id").size()
#法3
steam_s_ip_count=pd.DataFrame({"sum":steamC_data_v4.groupby(['s_ip','hour_minute']).size()}).reset_index()
steam_s_ip_count.shape[0]
steam_s_ip_count.sort_values(by="sum",ascending=False).head(20)#显示前20条数据,并从小到大排列
6、统计Dataframe中每一列独立值/唯一值的个数
len(time_top['client_ip'].unique())
7、获取Dataframe中某些字段数据
#多个字段
data_list = dataframe[['cfg_id','server_ip','client_ip','server_port','client_port','server_locate','client_locate','sni']]
data_list.head(3)
#单个字段
y=data["place_id"]
y.head()
#单个字段
y=data[["place_id"]]
y.head()
8、将某个字段设置成索引,并提取索引为9664346的数据
data_list1= data_list.set_index("cfg_id")
faceB_data=data_list1.loc[9664346]
9、将某个列表恢复成数字索引
faceB_data_list=faceB_data.reset_index()
数字索引,并删除之前的旧索引
data = data.reset_index(drop=True)
10、统计列表行数,列数
row_num=df.shape[0]
loc_num=df.shape[1]
11、判断一个值是否为Nan,NULL,并填充
(0)查看df表的所有列的空值情况
print(df.isnull().any(axis=0))#查看df表的所有列的空值情况
isnull: 判断是否为空。
返回bool类型的值:True or False
any:返回是否至少一个元素为真
all:返回是否所有元素为真
axis=1或0: 1表示横轴,方向从左到右;0表示纵轴,方向从上到下
import pandas as pd
pd.isnull(x)
(1)统计每一列的缺失值数量
print (df.isnull().sum())
(2)统计每一行的缺失值数量
print (df.isnull().sum(1))
(3)使用一个值来填补缺省值
df.fillna(0)
(4)使用前一个值来填充
df.fillna(method='ffill')
df.fillna(method='pad')
(5)使用后一个值来填充
df.fillna(method='bfill')
df.fillna(method='backfill')
(6)不同的列用不同的值填补
df.fillna({'first':1,'seconde':2})
(7)使用该字段已有数据的平均值进行填充
#单一字段填充,改变原数据表
x["age"].fillna(x["age"].mean(),inplace=True)
#表中所有字段的填充
df.fillna(df.mean())
12、pandas删除指定列
改变原始数据
df.drop(["contact2"],axis=1,inplace=True)
不改变原始数据df
df.drop(["contact2"],axis=1)
13、按照两个列表共有的列作合并,默认为内连接
相同的列为name
df= pd.merge(df1,df2,on='name')
14、删除缺失值
(1)删除表中为空值的行
df.dropna(inplace=True)
(2)删除指定列为空值的行
df=df.dropna(axis=0,subset=["graduated"])
15、判断具体位置的值是否为空值
pd.notnull(df.iloc[row,1])
16、创建一个新列表,并为新列表赋值
new_df=pd.DataFrame(columns=('alumni_relation','name'))
new_df = new_df.append(pd.DataFrame(
{'alumni_relation': [alumni], 'name': [df.iloc[row, 0]]}), ignore_index=True)
17、pandas读取的nan改成空值
df=pd.read_excel('data/final_samename_part.xlsx',parse_cols='A:F,k',**keep_default_na=False**)
18、修改列名
(1)
df.columns=['name','sex','birthday'] #直接重新赋予列名
(2)
df.rename(columns={'name':'sex'},inplace=True)
(3)字符串列名变大写
df.rename(columns=str.upper)
(3)字符串列名第一个字母大写,其余小写
df.rename(columns=lambda x:x[:1].upper()+x[1:].lower())
19、按行删除第row行,且不改变源数据
row为要删除的行索引,可以是某一个值,可以是列表
df.drop(labels=row,axis=0,inplace=None)
20、pandas在后面增加一列value
df['value']=None
21、DataFrame数据展示
df.head(n)#显示前n个样本,默认显示前5条
df.tail(n)#显示末尾n个样本
df.sample(n)#显示随机n个样本
22、读写csv文件
(1)分块提取,逐块提取文件设置每块读取的行数chunksize()
chunker = pd.read_csv('ls.csv' , chunksize=4)
for piece in chunker:
pass
(2)读取任意大小的块
df = pd.read_csv('ls.csv' , iterator=True)
df.get_chunk(4)
(3)将待保存的df文件打印
import sys
df.to_csv(sys.stdout)
df.to_csv(sys.stdout,index=False)#去掉不必要的索引列
23、读写Excel文件
Excel文件是以制表符分隔列,也存在多个工作表sheet
df = pd.read_excel('ls.excel' , sheet_name='first')
df = pd.read_excel('ls.excel' , sheet_name=['first','second'])
df['first']
df.to_excel('ls.excel')
24、查看非缺失值样本的数量
df.count()
25、行列索引(筛选过滤)
(1)对行进行索引
df.reindex([1,2,5])
(2)对列进行索引
df.reindex(columns=[1,2,5])
26、层次级索引
一个轴上包含多个索引级别
27、排序
(1)按照a列的值进行排序
df.sort_values('a')
(2)按照索引进行排序
默认ascending=‘True’升序
df.sort_index(ascending='False')
(3)随机重排
sampler = np.random.permutation(10)
>>>array([5,3,6,2,9,0,7,1,4,8])
df.take(sampler)#索引按数组值的顺序排列
df.sample(len(df))
28、交叉表-设置一个列索引、一个行索引统计数据频次
table=pd.crosstab(tab3["user_id"],tab3["aisle"])
table.head()
29、读取一个没有表头的csv文件,并不以第一行作为表头,添加自定义表头
#读取文件时header=None取消第一行作为表头
tab=pd.read_csv("./data/242/res.csv",sep="\t",header=None)
#添加自定义表头
tab.columns=['ip','cfg_id','count']
tab=pd.read_csv("./data/242/res.csv",sep="\t",header=None,names=('ip','cfg_id','count'))
30、将行数据转为列数据
df=df0.pivot(index='num',columns='let',values='C').rename_axis(columns=None).reset_index()
31、将列数据转为行数据
new_df=pd.melt(df,id_vars='num',var_name='let',value_name='C')
new_df
#删除指定列为空值的行,并重新排序行索引
final_df=new_df.dropna(axis=0,subset=["C"]).reset_index()
final_df
32、将某列数据Series转成列表list
x=data1["5423269"].tolist()
33、统计一个列表中不同元素的个数,并转成字典形式
from collections import Counter
c = Counter(result.tolist())
dict(c)
34、将dataframe中的数据转成np.array,舍掉索引列
data4=data4.values
time=data4["time"].values#serise数据转换成np.array同理
35、将dataframe中的数据转成整数
data2=data1.astype(int)
36、找出dataframe中的重复数据,并删除
#找出重复的数据索引,keep='first'默认值,查找除第一次出现的重复数据索引
#keep='last'查找除最后一次出现的重复数据索引
#keep=False 查找所有重复数据索引
dul_index=data1.loc[data2.duplicated(subset['a','b','c'],keep='first')].index
data2=data2.drop(labels=dul_index)
#查找后直接删除,inplace=True直接更改原表
data1.drop_duplicates(subset=["b","c"],keep="first",inplace=True)
37,统计某个字段place_id的个数,并保留次数大于3的数据dataframe
place_count=data.groupby("place_id").size()
data=data[data["place_id"].isin(place_count[place_count>3].index)]
38,求某个字段的平均值(计算时不包括字段中的空值)
a['age'].mean()
>>>38.0
39,Dataframe转换成字典
1、x.head().to_dict()
结果为一个二维字典,一列字段为一个字典
2、x.head().to_dict(orient="records")
结果为字典列表,一行数据为一个字典
40,Dataframe数据替换,当缺失值不是NAN,NULL时,先替换成np.nan,再处理
cancer=cancer.replace(to_replace="?",value=np.nan)
41,查看Dataframe中各个字段是否含有缺失值
df.isnull().any()
42,loc与iloc的使用
loc[1,'name']#里面是行列索引名
iloc[1,2]#里面放的是行列次序,从0开始
#切片索引,所有行,第一列到倒数第二列
df.iloc[:,1:-1]