pandas 常用命令集合

一、读取文件
1、读取csv、txt 格式时:
sep为分隔2符,默认为逗号,如果读取的数据分割的不正常,可能是分隔符的问题,换成正确的分隔符就行。
encoding 是编码,有的时候用的是其他编码,如果要正确显示不出现乱码,加上会减少很多意外。
engine 是读取的机器,不加这个字段,有时候无法正确读取数据。

path1 = r'C:\Users\MAYAN\Downloads\人工对话详情8.1.csv'
data1 = pd.read_csv(path1,sep=',',encoding='utf-8',engine='python')
data1.head()

2、读取excel格式时:
当读取某个工作薄里面的某一个表格时,直接加入sheet_names 等于需要读取的表格名称便可。

path1 = r'C:\Users\MAYAN\Downloads\人工对话详情8.1.csv'
data1 = pd.read_excel(path1,encoding='utf-8',sheet_names='Sheet1')
data1.head()

3、将同一文件夹下多个文件合并成一个文件
txt格式:

import os

# 获取目标文件夹的路径
path = "F:/bj/新建文件夹/内容"
# 获取当前文件夹中的文件名称列表
filenames = os.listdir(path)
result = "result/merge.txt"
# 打开当前目录下的result.txt文件,如果没有则创建
file = open(result, 'w+', encoding="utf-8")
# 向文件中写入字符
 
# 先遍历文件名
for filename in filenames:
    filepath = path + '/'
    filepath = filepath + filename
    # 遍历单个文件,读取行数
    for line in open(filepath, encoding="utf-8"):
        file.writelines(line)
    file.write('\n')
# 关闭文件
file.close()

excel 格式:

import os
import pandas as pd
 
# 将文件读取出来放一个列表里面
 
pwd = r'F:/bj/新建文件夹/内容' # 获取文件目录路径
 
# 新建列表,存放文件名
file_list = []
 
# 新建列表存放每个文件数据(依次读取多个相同结构的Excel文件并创建DataFrame)
dfs = []
for root,dirs,files in os.walk(pwd): # 第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。
  for file in files:
    file_path = os.path.join(root, file)
    file_list.append(file_path) # 使用os.path.join(dirpath, name)得到全路径
    df = pd.read_excel(file_path) # 将excel转换成DataFrame
    dfs.append(df)
 
# 将多个DataFrame合并为一个
df = pd.concat(dfs)
 
# 写入excel文件,不包含索引数据
df.to_excel('test\\result.xls', index=False)

二、去除重复项
1、duplicated 判定是否重复,重复显示为True,不重复显示为Fales
2、drop_duplicates 删除重复值,keep =first,默认保留重复的第一行,删除剩余所有的行,如果keep=False,则删除所有的重复项,一个也不保留。具体例子如下:

from pandas import Series,DataFrame
s = pd.Series([1,1,1,1,2,2,2,3,4,5,5,5,5])
print(s.duplicated())
#duplicated()得到重复值判断的布尔值,再选择布尔值为False的既为非重复值
print(s[s.duplicated()==False])
#或者直接采用drop_duplicates()去除重复值,返回唯一值
print(s.drop_duplicates())

3、展示某列非重复的值 unique()
4、计算某列非重复值的个数nunique()
在这里插入图片描述
三、替换
1、df.replace(to_replace, value,inplace=False)

df.replace(['A','29.54'],['B',100]) #整体替换
df['aa'].replace('花花','草草',inpalce=True) #局部替换,inplace设置为True,否则不生效
df.replace('[A-Z]','变电站',regex=True,inplace=True) #正则表达式
df['aa'].str.repalce('ab','AB')#替换部分字符串

四、空值填充
fillna()替换空值

df.fillna("0") #用0替换空值,全局生效

df2=pd.DataFrame(np.random.randint(0,10,(5,5)))
df2.iloc[1:4,3]=NaN;df2.iloc[2:4,4]=NaN
df2.fillna(method='ffill')#用前面的值来填充
df2.fillna(method='bfill',limit=2)#用后面的值来填充,填充倒数两行
df2.fillna(method="ffill",limit=1,axis=1)#用前面的值横向填充一列

五、多条件筛选

ask1 = ask[(ask['队列'].isin(duilie))&(ask['排队目标']!='针对会话')]

六、判断统一用户是否连续今天进入
shift,与groupby组合使用,对列进行上下平移,方便进行判断。
通过shift函数里面的值来控制向前还是向后偏移, 向前为正数,向后为负数。缺少的值会填充NaN,groupby函数里的参数控制基于什么字段进行shift.

# 向下平移
df['value_shift'] = df.groupby('name')['value'].shift(1)
df
	name	value	value_shift
0	a	1	NaN
1	a	2	1.0
2	a	3	2.0
3	b	4	NaN
4	b	5	4.0
5	c	6	NaN

# 向上平移
df['value_shift_1'] = df.groupby('name')['value'].shift(-1)
df
	name	value	value_shift	value_shift_1
0	a	1	NaN	2.0
1	a	2	1.0	3.0
2	a	3	2.0	NaN
3	b	4	NaN	5.0
4	b	5	4.0	NaN
5	c	6	NaN	NaN

七、数据透视表

pivot_table(data, values=None, index=None, columns=None,aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')

#index --索引,左边固定不动,可设置多层索引
pd.pivot_table(df,index=[u'对手',u'主客场'])
#values  需要计算的值
pd.pivot_table(df,index=[u'主客场',u'胜负'],values=[u'得分',u'助攻',u'篮板'])
#aggfun 对数据进行聚合,默认为aggfun='mean'
#aggfunc=[np.sum,np.avg]
#Columns类似Index可以设置列层次字段,它不是一个必要参数,作为一种分割数据的可选方式。

 #fill_value填充空值,margins=True进行汇总
 pd.pivot_table(df,index=[u'主客场'],columns=[u'对手'],values=[u'得分'],aggfunc=[np.sum],fill_value=0,margins=1)

八、时间转化及计算
1、字符串转化为日期

 pd.to_datetime('2020-01-01')

2、时间戳转化为日期

df['gtime']=pd.to_datetime(df['gtime'],unit='s'))

这里是引用可选参数:
origin : 标量,默认为’unix’
定义参考日期。自该参考日期以来,数值将被解析为单位数(由unit定义)。
如果是“ unix”(或POSIX)时间;原点设置为1970-01-01。
如果为’julian’,则单位必须为’D’,并且原点设置为Julian Calendar的开头。朱利安天数0被指定为从公元前4713年1月1日正午开始的那一天。
如果时间戳可转换,则将原点设置为由原点标识的时间戳。

时间转换详细细节可参考此篇文章:
https://blog.csdn.net/XiaoMaEr66/article/details/104349986

 df.stack()
 df.set_index(['产品类型','产品名称’]).stack().reset_index()
 效果类似数据透视表,通过index 设置多重索引后,实现透视效果。
 
 df.melt()
pd.melt(df,id_vars=['产品类型','产品名称’],value_vars=['一月销售',‘二月销售’,‘三月销售’],value_name='销售金额’)
id_vars是指普通列的列名,不会被转换,value_vars是指那些需要转换的列名,转换后的列名为value_name

在这里插入图片描述

在使用中遇到的一些问题,也会陆续总结和更新在这里,欢迎大家一起探讨。

猜你喜欢

转载自blog.csdn.net/XiaoMaEr66/article/details/108934139