pandas
1 作用:数据分析和处理
2 处理excel数据
2.1 读取excel数据
file = request.files.get("file")
read_ex = pd.read_excel(file)
df = pd.DataFrame(read_ex)
1.获取列标题:
columns = df.columns.values.tolist()
2.获取某一列数据:
area_list = df['大区'].tolist() # 获取列标题为“大区”的列数据
3.设置列:
df["user"] = "lxl" # 如果没有user列,会添加这一列,并填充“lxl”
4.对一行或一列做出一些操作(axis=1遍历行,axis=0遍历列)
df = df.apply(ra_data_process, axis=1)
5.重命名行或者列索引
df.rename(columns={
"门店编码": "store_code",
"商品编码": "sku_code",
"确认补货": "modify_replenish",
"调拨": "modify_send",
"建议调入门店": "receive_store_name",
"调入门店": "modify_receive_store_name",
},
inplace=True)
# inplace:bool,default False
将结果返回赋值给原变量,无需再次将结果赋值给新变量。即df.rename(inplace=True)之后,df的值发生改变(pandas中好多方法都有这个参数,此处就演示了)
6.获取部分列数据
df = df[["大区", "门店编码"]]
7.df转化为字典:
In [9]: df.to_dict(orient='records')
Out[9]:
[{'colA': 'A', 'colB': 'X', 'colC': 100, 'colD': 90},
{'colA': 'A', 'colB': nan, 'colC': 50, 'colD': 60},
{'colA': 'B', 'colB': 'Ya', 'colC': 30, 'colD': 60},
{'colA': 'C', 'colB': 'Xb', 'colC': 50, 'colD': 80},
{'colA': 'A', 'colB': 'Xa', 'colC': 20, 'colD': 50}]
8.DataFrame.loc:根据行列信息获取指定行列数据
cc1 = df.loc[1] # 1为行索引,这里获取第一行数据,从0行开始算,得到类似字典的东西,key为列索引
print(cc1['大区']) # 根据key获取这一行的值
values = cc1.values # 获取这一行数据的列表
cc1 = df.loc[[1, 2]] # 也可获取多行,这里表示获取索引为1和2两行的数据
cc1 = df.loc[[1, 2], '门店编码'] 如果中括号中有两个,第二个为列,这里表示,取第1、2行,列索引为‘门店编码’的列的数据
9. DataFrame.iloc 也是取行列数据,区别在于,取数据时,不是根据行列索引,而是根据行列数,计算时不包括行列索引
dd = df.iloc[1,1] # 取第1行第1列数据, 也是从0开始计数
dd = df.iloc[[1, 2], 1] #获取第1列,第1、2行的数据
10.获取dataframe获取行数、列数
a = [[1,2,3], [4,5,6], [7,8,9],[4,5,8]]
df = pandas.DataFrame(a)
print("行数", df.shape[0]) # 4
print("列数", df.shape[1]) # 3
1.按某一列排序
a = [(1, 2, 5), (3, 4, 5), (2, 3, 4)] df = pd.DataFrame(data=a, columns=["a", 'b', 'c']) print(df) df.sort_values(by="a", ascending=False, inplace=True) # by:按哪个字段排序, ascending:是否升序,inplace:是否修改当前dataframe print(df)
执行结果:
a b c 0 1 2 5 1 3 4 5 2 2 3 4 a b c 1 3 4 5 2 2 3 4 0 1 2 5
高级:排序时先对值进行转换,使用转换后的值进行排序
def to_pinyins(ss): # 注意这里参数是一个列表 ''' 转拼音 :param s: 字符串或列表 :type s: str or list :return: 拼音字符串 ''' return [''.join(chain.from_iterable(pinyin(s, style=Style.TONE3))) for s in ss] if __name__ == '__main__': a = [("哈哈",4, 5), ("佳佳", 3, 4), ("啊啊", 2, 5), ("四十", 3, 4)] df = pd.DataFrame(data=a, columns=["a", 'b', 'c']) df.sort_values(by="a", inplace=True, key=to_pinyins) # 传入一个方法,排序前会先用这个方法将列的值转换,使用转换后的值进行排序 print(df)
执行结果 :
a b c 2 啊啊 2 5 0 哈哈 4 5 1 佳佳 3 4 3 四十 3 4
2.去重:
a = [(1, 2, 5), (1,2, 5), (2, 3, 4)] df = pd.DataFrame(data=a, columns=["a", 'b', 'c']) print(df) df.drop_duplicates(inplace=True) print(df)
执行结果:
a b c 0 1 2 5 1 1 2 5 2 2 3 4 a b c 0 1 2 5 2 2 3 4
3.获取某列的分类(去重后的值):
a = [("哈哈",4, 5), ("佳佳", 3, 4), ("啊啊", 2, 5), ("四十", 3, 4)] df = pd.DataFrame(data=a, columns=["a", 'b', 'c']) c = pd.Categorical(df['b']) print(c.categories) print("--------") print(c.tolist()) print("--------") print(c.unique()) print("--------") print(c.size)
执行结果:
Int64Index([2, 3, 4], dtype='int64') -------- [4, 3, 2, 3] -------- [4, 3, 2] Categories (3, int64): [4, 3, 2] -------- 4
实现自定义排序
a = [("哈哈",4, 5), ("佳佳", 3, 4), ("啊啊", 2, 5), ("四十", 3, 4)] df = pd.DataFrame(data=a, columns=["a", 'b', 'c']) cc = pd.Categorical(df['b'], categories=[3, 2, 4], ordered=True) # 定义了b列分类为[3, 2, 4],并设置了顺序为 3>2>4 print(cc) df["b"] = cc # 将b列设置为cc, df.sort_values(by="b", inplace=True) # 按b列排序,此时按照b列3>2>4进行排序 print(df)
执行结果:
[4, 3, 2, 3] Categories (3, int64): [3 < 2 < 4] a b c 1 佳佳 3 4 3 四十 3 4 2 啊啊 2 5 0 哈哈 4 5
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构