#引入要用的库
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)
python处理excel数据实战(附完整代码)
于 2024-06-19 10:17:56 首次发布