Python库使用笔记—Dataframe

Pandas-Dataframe使用笔记

一、Dataframe的读取和保存

1.1 Dataframe导出csv

# Dataframe转CSV
xlsx_file.to_csv('F:/XXX/XXX.csv', encoding="utf-8-sig",header=True)

1.2 Pandas读取xlsx

# xlsx_file_name 如:'F:/XXX/XXX.xlsx'
# 一般xlsx默认的sheet_name是Sheet1
xlsx_file = pd.read_excel(xlsx_file_name, sheet_name='Sheet1')

1.3 Dataframe的创建

dataframe可以通过读取csv或者xlsx等方式创建,同时也可以通过数组创建

import pandas as pd
# 创建数组
data_list = [[6,10,3],[1,5,4],[1,2,4],[1,15,24],[1,0,2],[3,7,9],[2,8,5]]
# 通过数组创建dataframe, columns并不是必须的, 如果不提供的话默认用0,1,...,n表示
df = pd.DataFrame(data_list,columns=['A','B','C'])
# 指定dataframe的行索引, 这也不是必须的, 如果不提供的话默认用0,1,...,n表示
df.index = ['G','H','I','J','K','L','M']
# 打印结果
print(df)

二、Dataframe的操作

2.1 获取Dataframe和行数和列数

import pandas as pd
import numpy as np
# 创建dataframe
df = pd.DataFrame(np.arange(24).reshape(6,4), columns=['A', 'B', 'C', 'D'])
row_nums = df.shape[0]
col_nums = df.columns.size
print(row_nums)
print(col_nums)

# 获取特定行data.iloc[x,y]

2.2 Dataframe删除行、列

import pandas as pd
import numpy as np
# 创建dataframe
df = pd.DataFrame(np.arange(24).reshape(6,4), columns=['A', 'B', 'C', 'D'])
print(df)
# 删除单行
df1 = df.drop(axis=0, index = 1, inplace=False)
print(df1)
# 删除多行
df2 = df.drop(axis=0, index = [1,2,4], inplace=False)
print(df2)
# 删除列
df3 = df.drop(axis=1, columns = ['A','D'], inplace=False)
print(df3)

注意删除多行的时候要确保index存在,一种非常隐蔽的错误是:

import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.arange(12).reshape(3,4), columns=['A', 'B', 'C', 'D'])
df2 = pd.DataFrame(np.arange(12).reshape(3,4), columns=['A', 'B', 'C', 'D'])
# ignore_index=True 保留原索引
new_df = pd.concat([df1,df2], ignore_index=False)
# 打印可以看到拼接之后索引只有0,1,2
print(new_df)
# 当我们调用删除行函数的时候会报错,因为没有index=3,虽然这个dataframe是6x4大小的
# 这是一个非常隐蔽的错误
df3 = new_df.drop(axis=0, index = 3, inplace=False)

2.3 Dataframe的排序

dataframe的排序有通过行列的名称进行排序,也有同行的数值或者列的数值进行排序。对于数值排序,采用sort_values函数。

import pandas as pd
# 创建dataframe
data_list = [[6,10,3],[1,5,4],[1,2,4],[1,15,24],[1,0,36],[3,7,9],[2,8,5]]
df = pd.DataFrame(data_list,columns=['A','B','C'])
df.index = ['G','H','I','J','K','L','M']
# 对列A进行降序排列
# ascending表示是否升序排列, inplace表示在自身进行排序
df.sort_values(by='A',axis=0,ascending=False,inplace=True)
print(df)

df = pd.DataFrame(data_list,columns=['A','B','C'])
df.index = ['G','H','I','J','K','L','M']
# 对A列和B列进行升序排列,按照A、B的优先级进行排序
df_data_order = df.sort_values(by=['A','B'],ascending=[True,True])
print(df_data_order)

很多时候,对于一些默认行号的dataframe,排序之后会把把行号打乱。这个时候可以通过reset_index函数重置索引。

import pandas as pd
data = [['a','3'],['b','1'],['c','2']]
df = pd.DataFrame(data)
df = df.sort_values(by = 1,axis = 0,ascending = False)
# 排序后的行号是乱的
print(df)
# 重置索引后行号按照0,1,2,...顺序
df = df.reset_index(drop=True)
print(df)

2.4 Dataframe的拼接

Dataframe的拼接有几个函数:merge、concat等函数

import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.arange(12).reshape(3,4), columns=['A', 'B', 'C', 'D'])
df2 = pd.DataFrame(np.arange(12).reshape(3,4), columns=['A', 'B', 'C', 'D'])
# 拼接df1和df2,默认的拼接方向axis=0垂直方向拼接
# ignore_index=True 忽略原索引
new_df = pd.concat([df1,df2], ignore_index=True)
print(new_df)
# ignore_index=True 保留原索引
new_df = pd.concat([df1,df2], ignore_index=False)
print(new_df)

2.5 Dataframe数据筛选

import pandas as pd
# 创建数组
data_list = [['拖动',10,3],[1,5,4],['拖动',2,4],[1,15,24],['滑动',0,2],[3,7,9],[2,8,5]]
# 通过数组创建dataframe, columns并不是必须的, 如果不提供的话默认用0,1,...,n表示
df = pd.DataFrame(data_list,columns=['A','B','C'])
print(df)
# 去掉A列中包含拖动的数值
df1 = df[~(df['A']=='拖动')]
# 重建索引序号
df1 = df1.reset_index(drop=True)
print(df)
# 更加复杂的运算操作
# df=df[~((df['B']>7)|(df['D']==0))]

df1 = df[(df['A'].isin(['拖动','滑动']) == True)]
df1 = df1.reset_index(drop=True)
print(df1)

# 列筛选A列和B列
df = pd.DataFrame(data_list,columns=['A','B','C'])
df = df[['A','B']]
print(df)

对dataframe的字符串筛选也可以通过Dataframe的contain函数,这种方式可以允许子串的搜索,同时contain函数也支持正则表达式。

import pandas as pd
# 创建数组
data_list = [['拖动',10,3],[1,5,4],['拖动',2,4],[1,15,24],['滑动',0,2],[3,7,9],[2,8,5]]
# 通过数组创建dataframe, columns并不是必须的, 如果不提供的话默认用0,1,...,n表示
df = pd.DataFrame(data_list,columns=['A','B','C'])
print(df)
# 去掉A列中包含动的数值
df=df[(df['A'].str.contains('动') == True)]
# 重建索引序号
df = df.reset_index(drop=True)
print(df)

# contains函数支持正则表达式
df = pd.DataFrame(data_list,columns=['A','B','C'])
parttern = r'.*?'
df=df[(df['A'].str.contains(parttern) == True)]
print(df)

2.6 Dataframe NaN处理

axis: default 0指行,1为列

how: {‘any’, ‘all’}, default ‘any’指带缺失值的所有行;'all’指清除全是缺失值的

thresh: int,保留含有int个非空值的行

subset: 对特定的列进行缺失值删除处理

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [np.nan, 1, 2], 'B': [10, np.nan, 10], 'C': [10, 25, 15]})
print(df)
# any表示某一行或者某一列有NaN即被抛弃, all表示清除全部都是NaN
df = df.dropna(axis=0, how='any')
print(df)
# 删除pkg中存在NaN的列, subset=['pkg','xxx','xxxxx']
# df2 = df.dropna(axis='index', how='all', subset=['pkg'])
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,DataFrame类型的对象可以使用prod()函数进行累乘操作。prod()函数默认是对所有的行进行操作,如果需要对列进行操作,可以使用axis参数指定轴向。根据引用中的例子,执行myDF.prod(axis=0)会得到每一列的累乘结果,而执行myDF.prod(axis=1)会得到每一行的累乘结果。所以选项C是错误的,第二次执行完,一共有2个结果。选项A是正确的,第一次执行完,一共有3个结果。选项B是正确的,第二次执行完,第二行的结果为6000。选项D是正确的,myDF是2行3列的数据框。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [对DataFrame各行列累乘:prod()函数](https://blog.csdn.net/liujingwei8610/article/details/127582786)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Python学习笔记——dataframe基础常用操作](https://blog.csdn.net/weixin_45880459/article/details/127263215)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值