python处理excel数据实战(附完整代码)

#引入要用的库
import pandas as pd
import numpy  as np
#读入csv或者excel文件,路径要么用/,要么用\\双斜杠
df_csv = pd.read_csv('C:\\Users\Admin\\Desktop\\文件.csv', encoding='gbk')
df_excel = pd.read_excel('C:\\Users\Admin\\Desktop\\文件.xlsx')

# 查看dataframe的情况
df_excel.shape #行数和列数
df_excel.columns #列名
df_excel.dtypes #列的字符类型
df_excel['a'] #查看名为a的那一列
df_excel.loc[df_excel['a']==] 查看 a列值为指定值的那一行

#对dataframe进行一些操作
df_excel.rename(columns={'a': 'a1','b':'b1'}, inplace=True) #改名
df_excel_1 = df_excel.drop_duplicates(subset=['a','']) # 根据指定列去重
df_deduplicated = df.drop_duplicates() #根据所有的列去重
df_excel['a'] = merged_df['a'].astype(str)  #将a列的字符类型转换
merged_df = pd.merge(df_excel,df_sql_1, left_on='',right_on ='',how='left')#合并两个dataframe

#分段计数
bins = [0,30,50,float('inf)] #第一段:[0,3) ,第二段:[30,50),第三段:[50,inf)
labels = ['Low', 'Medium', 'High']  # 分段的标签
# 使用cut函数创建分段  
df_excel['成本价分段'] = pd.cut(df_excel['成本价'], bins=bins, labels=labels)  
# 按分段和spu进行分组并计数  
result = df_excel.groupby(['成本价分段']).size().reset_index(name='计数')  
result.head()

# 每个spu取最大的成本价
max_prices = df_1.groupby('SPU')['成本价'].transform('max')  
# 使用布尔索引选择成本价等于最大成本价的行  
df_2 = df_1[df_1['成本价'] == max_prices]  

#纵向连接两个表(要保证列名一致)
df_con = pd.concat([df_1, df_2, ignore_index=True)  # ignore_index=True用于重置索引  
# 使用isnull()或isna()来检测空值  
# 这将返回一个与原始DataFrame相同形状的布尔DataFrame,其中True表示空值,False表示非空值  
null_values = df.isnull()    
# 使用any(axis=1)来检查每一行中是否至少有一个True(即至少一个空值)  
# 这将返回一个Series,其中True表示该行包含空值,False表示该行不包含空值  
rows_with_nulls = df[df.isnull().any(axis=1)]    
# 输出包含空值的行  
print(rows_with_nulls)
  



#分列

import pandas as pd    
df = pd.read_excel('C:\\Users\Admin\\Desktop\\文件名.xlsx')  # 替换为你的文件名   
# 确保每个(SKU, 店长)组合是唯一的(去重)  
df_unique = df.drop_duplicates(subset=['erpSku', '店长'])   
# 为每个店长在相同SKU下分配一个唯一的序号  
df_unique['店长序号'] = df_unique.groupby('erpSku').cumcount() + 1   
# 设置'sku'为索引,并且用'店长序号'进行透视(unstack)  
pivot_df = df_unique.set_index(['erpSku', '店长序号'])['店长'].unstack()   
# 如果需要,重命名列名(这里已经是'店长序号'作为列名了)   
pivot_df.columns = ['店长' + str(i) for i in pivot_df.columns]  # 这行代码可能不需要,取决于你的需求    
# 重置索引,使'sku'成为一列而不是索引(如果需要的话)  
pivot_df = pivot_df.reset_index()    
# 如果需要,将DataFrame保存回Excel文件  
pivot_df.to_excel('output_file.xlsx', index=False)  # 替换为你想要保存的文件名

#文件夹文件合并
import os  
import pandas as pd   
# 设置文件夹路径  
folder_path = 'C:\\Users\\Admin\\Desktop\\文件夹名称'  
output_file = 'output_file.xlsx'  
# 创建一个空的列表来保存所有DataFrame  
all_data = []  
# 遍历文件夹中的所有文件  
for filename in os.listdir(folder_path):  
    # 检查文件是否是Excel文件  
    if filename.endswith('.xlsx') or filename.endswith('.xls'):  
        # 提取文件名中的“某某”部分  
        # 假设文件名格式为“某某.xlsx”或“某某.xls”  
        name_part = filename.split('')[0]  # 提取“某某”  
        # 构造文件的完整路径  
        file_path = os.path.join(folder_path, filename)   
        # 读取Excel文件  
        df = pd.read_excel(file_path)  
        # 在DataFrame的第一列前插入新的列,列名为“姓名”,值为从文件名中提取的“某某”  
        df.insert(0, '姓名', name_part)  
        # 将处理过的DataFrame添加到列表中  
        all_data.append(df)  
# 使用concat函数将列表中的所有DataFrame合并为一个  
combined_df = pd.concat(all_data, ignore_index=True)  
# 将合并后的DataFrame保存到新的Excel文件中  
combined_df.to_excel(output_file, index=False)  
print(f'所有文件已合并到 {output_file}')



#列 变 集合
import pandas as pd    
# 假设这是你的原始DataFrame  
data = {  
    '姓名': ['张三', '李四', '王五', '张三', '赵六'],  
    '模板名称': ['模板A', '模板A', '模板B', '模板C', '模板C'],  
    '查看次数': [10, 5, 7, 30, 8]  
}  
df = pd.DataFrame(data)  
# 使用groupby和apply来创建新的DataFrame  
def aggregate_view_info(group):  
    # 对于每个模板名称,创建一个列表来存储姓名和查看次数的元组,并排序  
    view_info = sorted(zip(group['姓名'], group['查看次数']), key=lambda x: x[1], reverse=True)  
    # 返回模板名称和排序后的查看情况列表(这里作为元组列表返回)  
    return pd.Series({'模板名称': group.name, '查看情况': view_info})   
# 应用聚合函数并转换为DataFrame  
result_df = df.groupby('模板名称').apply(aggregate_view_info).reset_index(drop=True)   
# 如果需要将元组列表转换为字符串表示(可选)  
result_df['查看情况'] = result_df['查看情况'].apply(lambda x: str(x))    
# 显示结果  
print(result_df)



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值