merge()方法 - 类似Excel的Vlookup()函数
背景:从网上爬每天需要的数据,然后写入一个固定的Excel里。
# 筛选 大仓库存和在途数据
warehouse_col = warehouse_excel.loc[:, ['s', 'avaliable', 'transit']]# 选取所有行,以及其他列
warehouse_col['s'] = warehouse_col['s'].apply(int)# 转换为int类型,不然merge匹配要报错
result_warehouse = pd.merge(all_sku_code_datafram, warehouse_col, how='left',
left_on='编码', right_on='s') # 匹配
# 写入 直接list()把Datafram转为列表
kucun_zaijia_sheet.range('AJ' + str(6)).options(transpose=True).value = list(result_warehouse['avaliable'])
kucun_zaijia_sheet.range('AL' + str(6)).options(transpose=True).value = list(result_warehouse['transit'])
pandas to_excel() 报错
KeyError: <class ‘pandas._libs.tslibs.timestamps.Timestamp’>
更新了 pandas, openpyxl, xlwings之后,过了几分钟,莫名其妙又可以了,很绝望。
'''测试pandas的类excel - Vlookup函数之merge方法'''
import pandas as pd
import numpy as np
jxc_excel = pd.read_excel(r'E:\桌面\测试merge方法\TEST1.xlsx')
nina_excel = pd.read_excel(r'E:\桌面\测试merge方法\TEST2.xlsx')
in_ner = pd.merge(nina_excel, jxc_excel, how='left', left_on='sku_name', right_on='sku')
in_ner.to_excel(r'E:\桌面\测试merge方法\TEST.xlsx')
对列\行进行求和
1、对某一行进行求和:
row_sum = df.iloc[i,:].sum()
2、对某一列进行求和:
column_sum = df.iloc[:,j].sum()
3、对每一列进行求和:
for i in df.columns:
print(df[i].sum())
作者:Jinlong_Xu
来源:CSDN
原文:https://blog.csdn.net/jinlong_xu/article/details/61193418
求和之后直接用int转换成数值,list()转为列表
int(column_sum)
list(column_sum)
修改columns名
rename()
df1.rename(columns={'A': 'B', 'C': 'D'}, inplace=True)
其中
columns={‘A’: ‘B’}: A表示原来的名字,B表示替代后的名字
inplace=True: 直接在原datafram中更新替代的结果
read_csv()时,报错
因为文件有中文路径,所以需要先用open()打开路径
然后在open里指定encoding=‘utf-8’
最好在代码第一行加入: # -- coding: utf-8 --
df1 = pd.read_csv(open(df, encoding='utf-8'))
loc[] 与 iloc[]
进行values更改的时候,最好不要用iloc[],因为columns的序号有可能变更,比如一个名叫’AAA’的列,本来在第0列,经过一次操作变到第3列,这个时候继续用iloc[]去选中df1.iloc[:, 0]就会选到其他数据。
鉴于这个原因,在使用iloc[]进行values更改的时候,pandas会警示:
df1['是否白名单'] = df1.iloc[:, 2].isin(white_sku_code)
--------
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
此处提示使用loc[]来进行valuse更变,更改后如下:
df1['是否白名单'] = df1.loc[:, '希望选取的列名']