一、基础

  1. 新建Series
Type_new = pd.Series([]) 
  1. 数据框架
维数 名称 描述
1 Series 带标签的一维同构数组
2 DataFrame 带标签的,大小可变的,二维异构表格
  1. 数据结构

index(索引)、column(列)、row(行)。

  1. 数据筛选
New_pd = New_pd.loc[New_pd['处理者名称'].str.contains('在线')] #筛选"处理者名称"含有“在线”的行。
df = df[df['工单创建组']== 'D组在线'] #筛选“工单创建组”为“D组在线”的行。
df = df[df['工单创建组'].isin(['D组在线','金慧在线'])] #筛选“工单创建组”为“D组在线”、“金慧在线”的行。

  1. 修改列
DF_dapan.rename(columns={'平均排队时长(s)':"平均排队时长"},inplace=True) #修改列名
del DF_dapan['平均排队时长'] #删除列
DF_dapan= DF_dapan.drop('平均排队时长', 1)#删除列,不改变内存
DF_dapan= DF_dapan.drop('平均排队时长',axis=1, inplace=True)#删除列,改变内存
DF_dapan.drop(index=[1,3])
DF_dapan.drop(['升级工单量','上线天数'],axis=1, inplace=True)
DF_dapan.drop(DF_dapan[DF_dapan['升级工单量']==10].index)
DF_dapan = DF_dapan[DF_dapan['升级工单量'] !=10 ]
DF_dapan.loc[:,:] #取出所有列数据
DF_dapan.iloc[:,:]#取出所有行数据
DF_dapan.iloc[[0,2],[0,1]] #取出第0、2行,第0,1列数据

  1. 取数
df.loc['平均排队时长'] #通过index具体值取数
df.iloc[0] #通过行号取数

  1. 去重
DF_dapan.drop_duplicates(inplace=True)
DF_dapan.drop_duplicates(subset=['升级工单量','新增工单量'],keep='first',inplace=True)
# subset 默认值:None,需要去重的列名
# keep 默认值:first,first保留第一次出现的重复行,last保留最后一次出现,False删除所有重复项。

二、数据清洗

DF_dapan = DF_dapan.dropna(inplace = True) #删除包含空数据的行
DF_dapan.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False) #包含空字段的行
#axis 默认值:0,0表示整行,1表示整列。
#how 默认值:any。any 任意数据NA删掉,all 整行NA删掉
#thresh 保留至少有n个非NaN数据的行/列
#subset 设置要检查的列['']

三、时间处理

DF_dapan['创建日期']= DF_dapan.to_datetime(DF_dapan['创建日期'],format='%Y/%m/%d')
DF_dapan['上线天数'] = (DF_dapan.to_datetime(DF_dapan['上线时间'], format='%Y%m%d', errors='coerce') -
DF_dapan.to_datetime(DF_dapan['处理时间'], format='%Y%m%d', errors='coerce')).dt.days

四、插入数据(insert)

DF_dapan.insert(loc, column, value, allow_duplicates = False)
#loc 整数,插入新列位子。原此位置表格右移
#column 列名
#value 插入值
#allow_duplicates 允许重复值

五、数据遍历(map、apply、applymap)

#map单列
#①使用字典进行映射
DF_dapan["性别"] = DF_dapan["性别"].map({"男":1, "女":0}) #将性别男该为1,女改为0
#②使用函数
def gender_map(x):
gender = 1 if x == "男" else 0
return gender
DF_dapan["性别"] = DF_dapan["性别"].map(gender_map)
#apply 多列
def apply_age(x,bias):
return x+bias
DF_dapan["年龄"] = DF_dapan["年龄"].apply(apply_age,args=(-3,))

# applymap 全部元素
DF_dapan.applymap(lambda x:"%.2f" % x)#保留两位小数显示
DF_dapan.round(2)#保留两位小数显示

六、拼接

#列变多
df.merge(df_1,df_2,how='outer')
#行变多
pd.concat([df1,df2])

七、数据保存与读取

  1. 读取:

pd.read_excelpd.read_csvpd.read_jsonpd.read_html

  1. 写入:

df.to_csvdf.to_jsondf.to_htmldf.to_excel

  1. 转换

dfstr = df.to_string()

js001 = df.to_json(force_ascii=False)

八、常用函数

import pandas as pd

path = 'E:\python\测试\\数据查询.xlsx'
data = pd.DataFrame(pd.read_excel(path,sheet_name='Left',header=1,converters={'A': str})) # converters={'A': str} 设置A列格式为文本

data.index # 查看索引
data.index.values
data.values # 查看数值
data.sort_index() # 按索引排序
data.sort_values() # 按数值排序
data.head( 5 ) # 查看前5行
data.tail( 3 ) # 查看后3行
data.values # 查看数值
data.shape # 查看行数、列数
data.isnull() # 查找data中出现的空值
data.unique() # 查看唯一值
data.columns # 查看data的列名
data.sort_index() # 索引排序
data.sort_values() # 值排序

pd.merge(data1,data2) # 合并,以下为左连接
pd.merge(data1,data2,on=[a],how='left')
'''
'left':merge时,以左边表格的键为基准进行配对,如果左边表格中的键在右边不存在,则用缺失值NaN填充。
'right':merge时,以右边表格的键为基准进行配对,如果右边表格中的键在左边不存在,则用缺失值NaN填充。
'''
pd.concat([data1,data2],axis=0) # 合并,与merge的区别,自查(特别注意要使用[])
pd.concat([data01,data02,data03],axis=1) # 合并横向拼接
pd.pivot_table( data ) # 用df做data透视表(类似于Excel的数透)

data.reset_index() # 修改、删除原有索引
data.reindex() # 重置索引,如下示例
data.index = range(len(data)) # 重置索引,从0开始

a=data['x'] # 取列名为'x'的列,格式为series
b=data[['x']] # 取列名为'x'的列,格式为Dataframe
c=data[['w','z']] # 取多列时需要用Dataframe的格式
data.loc['A'] # 取行名为'A'的行
data.loc[:,['x','z'] ] # 表示选取所有的行以及columns为x,z的列
data['name'].values # 取列名为'name'的列的值(取出来的是array而不是series)取单行后是一个Series,Series有index而无columns,可以用name来获取单列的索引
data.head(4) # 取头四行
data.tail(3) # 取尾三行
data= data.iloc[2:, 2:20] # 选择2行开始、2-11列
[m, n] = data.shape # 对m,n进行复制,m等于最大行数 n等于最大列数

df.drop([0],axis=0)
data.notnull() # 非空值
data.dropna() # 删除空值
data.dropna() # 删除有空值的行
data.dropna(axis=1) # 删除有空值的列
data.dropna(how='all') # 删除所有值为Nan的行
data.dropna(thresh=2) # 至少保留两个非缺失值
data.strip() # 去除列表中的所有空格与换行符号
data.fillna(0) # 将空值填充0
data.replace(1, -1) # 将1替换成-1

data.fillna(100) # 填充缺失值为100
data.fillna({'语文':100,'数学':100,}) # 不同列填充不同值
data.fillna(method='ffill') # 将空值填充为上一个值
data.fillna(method='bfill') # 将空值填充下一个值
data.fillna(method='bfill',limit=1) # 将空值填充下一个值,限制填充数量为1



# 显示所有列
pd.set_option('display.max_columns', None)
# 显示所有行
pd.set_option('display.max_rows', None)

# 打印表头列表
print(data.columns.tolist())

# 转换为时间列
data['有效起始日期'] = pd.to_datetime(data['有效起始日期'])

# 转换为时间
df["date"] = pd.to_datetime(df["date"])
# 获取年月日
df["year-month-day"] = df["date"].apply(lambda x: x.strftime("%Y-%m-%d"))
# 获取年
df["year"] = df["date"].apply(lambda x: x.strftime("%Y"))
# 获取月
df["month"] = df["date"].apply(lambda x: x.strftime("%m"))
# 获取日
df["day"] = df["date"].apply(lambda x: x.strftime("%d"))
# 获取月日
df["month-day"] = df["date"].apply(lambda x: x.strftime("%Y-%m"))
# 获取周
df['week'] = df['date'].apply(lambda x: x.strftime('%W'))
--加一天
df['data_date'] + pd.Timedelta(days=1)
--减一天
df['data_date'] - pd.Timedelta(days=1)
print(df)
print(df.dtypes)

# 筛选
data = data.loc[(data['物料编码'] == bianma)]

# 计算类
data = data.groupby(["年/月", "物料编码",'商品名称'], axis = 0)["数量(Kg)"].sum().reset_index() # 分类汇总求和
'''reset_index()可以将分类汇总导致的缩进填充进去'''