Python pandas 各类 操作 备忘

>>> import pandas as pd

>>> factors={'2021':36.45,'2020':35.43,'2019':34.65,'2018':33.9,'2017':33.14}

# 必须加index,index中是列表,列表个数,即为记录数。
# 下面是以关键字为列名,共5列
>>> df = pd.DataFrame(factors,index=[1])

# 结果如下:
    2021   2020   2019  2018   2017
1  36.45  35.43  34.65  33.9  33.14

# 下面是分成2列,即key为一列,item为一列
>>> df = pd.DataFrame( list(zip(factors.keys(),factors.values())) ,columns=['Year','Factor'])

   Year  Factor
0  2021   36.45
1  2020   35.43
2  2019   34.65
3  2018   33.90
4  2017   33.14

# 选择记录
>>> df[2:4]
   Year  Factor
2  2019   346.5
3  2018   339.0

# 新增一行记录 'Year'列=2016 (如果index已存在,则直接修改)
>>> df.loc[5,'Year']=2016
>>> df
   Year  Factor
0  2021   36.45
1  2020   35.43
2  2019   34.65
3  2018   33.90
4  2017   33.14
5  2016     NaN

# 删除某一行记录, axis=0 为默认值, =0 表示删除行,=1删除列。
>>> df.drop(5,axis=0)
   Year  Factor
0  2021   36.45
1  2020   35.43
2  2019   34.65
3  2018   33.90
4  2017   33.14

# 增加一列空列
>>> df['memo'] = '' #新增列值为空
>>> df = df.reindex(columns=['Year','Factor','memo'])        #新增列值为Nan
   Year  Factor memo
0  2021   36.45     
1  2020   35.43     
2  2019   34.65     
3  2018   33.90     
4  2017   33.14     

# 删除某一列,labels 表示列名。axis=1表示删除列。inplace=True,直接修改
>>> df.drop(labels=['memo'],axis=1,inplace=True)
   Year  Factor
0  2021   36.45
1  2020   35.43
2  2019   34.65
3  2018   33.90
4  2017   33.14
5  2016     NaN

# 针对某一列进行操作,如统一乘10,可以用apply
>>> df.loc[:,'Factor'] = df['Factor'].apply(lambda x: x * 10) # 也可以代入函数 如 lambda x:func(x)
>>> df.loc[:,'Factor'] = [ x * 10 for x in df['Factor']]    #这个也可以
>>> df
   Year  Factor
0  2021   364.5
1  2020   354.3
2  2019   346.5
3  2018   339.0
4  2017   331.4
5  2016     NaN

# pandas read_csv

df = pd.read_csv(csv_path,encoding='utf8',sep=';',header=None,usecols=[0,1,5,6],names=['ID','Desc','Last_Update','Note'], skiprows=[0]).astype('str')
header=None #不要默认的列名
usecols = [0,1,5,6]    # 只要第1/2/6/8列,若数据列数不够,则该列为空。
names = ['ID','Desc','Last_Update','Note'] # 自定义的列名,与usecols个数一致。
skiprows=[0] # 跳过第1行,可多行,如第1和2行 = [0,1]
df.astype('str') #将df转成str,或某一列,如 df['ID'].astype('str')

df.drop_duplicates(column_list) # 去重操作,column_list是列表,可多列。
df.values.tolist() # 转成列表,或者 df['ID'].values.tolist()

# 读取大容量csv文件
# chunksize 分片 读取
pd.concat(pd.read_csv(input_path,chunksize=10000,iterator=True, encoding= codetxt ,sep=septxt),ignore_index=True)

#df 合并 : pd.merge(left, right, how, on )

pandas 合并行或列,透视与逆透视 (melt, pivot, concat)

# 统计

>>> df[['age','wgt']].groupby('age',as_index=False).sum()

将age分组,计算所有wgt的和。

sum()可以用其它函数代替,比如count

as_index=False,将分组后的age当成一列,而不是变成index。

默认as_index=True,即age成为index。

没有加sum(),则是个 groupby对象,加了以后变成df

#保存多个工作表到EXCEL

xlsx = pd.ExcelWriter(savepath)

df1.to_excel(xlsx,sheet_name='table1',index=False)

df2.to_excel(xlsx,sheet_name='table2',index=False)

# 统计信息 :describe()后的数据不是df对象,可以加个 to_frame()

>>> df['wgt'].describe().to_frame()

# 两列直接计算并赋值给另一列

>>> df['universe'] = df['wgt'] * df['factor']


# 删除某一列

>>> df.drop(columns=['factor'],inplace=True)  

# df字段explode,df中某列的值是列表,经过df.explode(字段) 后,拆成数行。

>>> df
   a          b
0  A  [1, 2, 3]
1  B        [4]
2  C        [5]

>>> df.explode('b')
   a  b
0  A  1
0  A  2
0  A  3
1  B  4
2  C  5

# 读取zip压缩文件夹中的某个csv文件 , pd.read_csv的参数

import zipfile
import pandas as pd
def read_Dicc_zip(self,zip_file_path):
    _zip = zipfile.ZipFile(zip_file_path)
    data = _zip.open(_zip.namelist()[0])
    df = pd.read_csv(data,encoding='utf8',sep=';',
        header=None,usecols=[0,1,5,6],
        names=['ID','Description','Last_Update','Note'], 
        skiprows=[0]).astype('str')
    df.Note=df.Note.str.replace(',',' | ')
    df['Last_Update'] = df['Last_Update'].apply(lambda x: x[:10])
    return df

>>> 导入数据
pd.read_csv(filename):从CSV文件导入数据
pd.read_table(filename):从限定分隔符的文本文件导入数据
pd.read_excel(filename):从Excel文件导入数据
pd.read_sql(query, connection_object):从SQL表/库导入数据
pd.read_json(json_string):从JSON格式的字符串导入数据
pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格
pd.read_clipboard():从你的粘贴板获取内容,并传给read_table()
pd.DataFrame(dict):从字典对象导入数据,Key是列名,Value是数据

>>> 导出数据
df.to_csv(filename):导出数据到CSV文件
df.to_excel(filename):导出数据到Excel文件
df.to_sql(table_name, connection_object):导出数据到SQL表
df.to_json(filename):以Json格式导出数据到文本文件

>>> 创建测试对象
pd.DataFrame(np.random.rand(20,5)):创建20行5列的随机数组成的DataFrame对象
pd.Series(my_list):从可迭代对象my_list创建一个Series对象
df.index = pd.date_range('1900/1/30', periods=df.shape[0]):增加一个日期索引

>>> 查看、检查数据
df.head(n):查看DataFrame对象的前n行
df.tail(n):查看DataFrame对象的最后n行
df.shape():查看行数和列数
df.info():查看索引、数据类型和内存信息
df.describe():查看数值型列的汇总统计
s.value_counts(dropna=False):查看Series对象的唯一值和计数
df.apply(pd.Series.value_counts):查看DataFrame对象中每一列的唯一值和计数

>>> 数据选取
df[col]:根据列名,并以Series的形式返回列
df[[col1, col2]]:以DataFrame形式返回多列
s.iloc[0]:按位置选取数据
s.loc['index_one']:按索引选取数据
df.iloc[0,:]:返回第一行
df.iloc[0,0]:返回第一列的第一个元素
df.values[:,:-1]:返回除了最后一列的其他列的所以数据
df.query('[1, 2] not in c'): 返回c列中不包含1,2的其他数据集

>>> 数据清理
df.columns = ['a','b','c']:重命名列名
pd.isnull():检查DataFrame对象中的空值,并返回一个Boolean数组
pd.notnull():检查DataFrame对象中的非空值,并返回一个Boolean数组
df.dropna():删除所有包含空值的行
df.dropna(axis=1):删除所有包含空值的列
df.dropna(axis=1,thresh=n):删除所有小于n个非空值的行
df.fillna(x):用x替换DataFrame对象中所有的空值
s.astype(float):将Series中的数据类型更改为float类型
s.replace(1,'one'):用‘one’代替所有等于1的值
s.replace([1,3],['one','three']):用'one'代替1,用'three'代替3
df.rename(columns=lambda x: x + 1):批量更改列名
df.rename(columns={'old_name': 'new_ name'}):选择性更改列名
df.set_index('column_one'):更改索引列
df.rename(index=lambda x: x + 1):批量重命名索引

>>> 数据处理:Filter、Sort和GroupBy
df[df[col] > 0.5]:选择col列的值大于0.5的行
df.sort_values(col1):按照列col1排序数据,默认升序排列
df.sort_values(col2, ascending=False):按照列col1降序排列数据
df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列数据
df.groupby(col):返回一个按列col进行分组的Groupby对象
df.groupby([col1,col2]):返回一个按多列进行分组的Groupby对象
df.groupby(col1)[col2]:返回按列col1进行分组后,列col2的均值
df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表
df.groupby(col1).agg(np.mean):返回按列col1分组的所有列的均值
data.apply(np.mean):对DataFrame中的每一列应用函数np.mean
data.apply(np.max,axis=1):对DataFrame中的每一行应用函数np.max

>>> 数据合并
df1.append(df2):将df2中的行添加到df1的尾部
df.concat([df1, df2],axis=1):将df2中的列添加到df1的尾部
df1.join(df2,on=col1,how='inner'):对df1的列和df2的列执行SQL形式的join

>>> 数据统计
df.describe():查看数据值列的汇总统计
df.mean():返回所有列的均值
df.corr():返回列与列之间的相关系数
df.count():返回每一列中的非空值的个数
df.max():返回每一列的最大值
df.min():返回每一列的最小值
df.median():返回每一列的中位数
df.std():返回每一列的标准差

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值