df=df_c.append(df_p,sort=False)# 数据透视
时间: 2024-04-24 12:24:23 浏览: 69
在最新版本的 Pandas 中,`frame.append`方法已经被废弃,建议使用`pandas.concat`方法来代替。如果你想通过添加另一个 DataFrame 来创建一个新的 DataFrame,可以使用`pandas.concat`方法。在你的例子中,你可以这样修改代码:
```python
df = pd.concat([df_c, df_p], sort=False)
```
这将会将`df_c`和`df_p`两个 DataFrame 沿着行方向进行拼接,并且不会对结果进行排序(设置`sort=False`)。最后,将拼接后的结果赋值给新的变量`df`。
希望这个回答对你有帮助。
相关问题
python代码: 1. 使用excel进行文档管理,添加多个供应商,A列序号,B列项目名称,C列供应商名称,D列需求总条数,E列FC条数,F列NC条数 2. 可以修改某个供应商的FC条数,NC条数 3. 可以新增一个供应商的数据 4. 可以删除某个供应商的数据 5. 可以对同一个文档根据FC条数进行排序 6. 可以对同一个文档根据NC条数进行排序 7. 可以查看某个供应商的数据 8. 有输入合法性校验 9. 根据C, E列生成数据透视图到新的sheet页 10. 根据C, F列生成数据透视图到新的sheet页 11. 根据C, E列生成折线图到新的sheet页 12. 根据C, F列生成折线图到新的sheet页 13. 根据C,E,F列生成柱状图到新的sheet页
这是一个比较复杂的需求,需要结合 Python 的 pandas 和 openpyxl 库来进行实现。下面是一个简单的实现示例:
```python
import pandas as pd
from openpyxl import Workbook, load_workbook
from openpyxl.chart import LineChart, BarChart, Reference, Series
# 读取 Excel 文件
wb = load_workbook('data.xlsx')
ws = wb.active
# 将数据转换为 DataFrame 格式
data = ws.values
cols = next(data)
df = pd.DataFrame(data, columns=cols)
# 添加新供应商
new_supplier = {'序号': 10, '项目名称': 'xxx', '供应商名称': 'yyy', '需求总条数': 100, 'FC条数': 50, 'NC条数': 50}
df = df.append(new_supplier, ignore_index=True)
# 修改供应商数据
df.loc[df['供应商名称'] == 'yyy', ['FC条数', 'NC条数']] = [60, 40]
# 删除供应商数据
df = df[df['供应商名称'] != 'zzz']
# 根据 FC 条数排序
df = df.sort_values('FC条数')
# 根据 NC 条数排序
df = df.sort_values('NC条数')
# 查看某个供应商的数据
supplier_data = df[df['供应商名称'] == 'yyy']
# 生成数据透视表
pivot_fc = pd.pivot_table(df, values='FC条数', index=['供应商名称'], aggfunc=sum)
pivot_nc = pd.pivot_table(df, values='NC条数', index=['供应商名称'], aggfunc=sum)
# 创建新的 sheet 页
ws2 = wb.create_sheet('数据透视表')
ws3 = wb.create_sheet('折线图')
ws4 = wb.create_sheet('柱状图')
# 写入数据透视表
for r in dataframe_to_rows(pivot_fc, index=True, header=True):
ws2.append(r)
for r in dataframe_to_rows(pivot_nc, index=True, header=True):
ws2.append(r)
# 生成折线图
chart_fc = LineChart()
chart_nc = LineChart()
chart_fc.title = 'FC条数折线图'
chart_nc.title = 'NC条数折线图'
chart_fc.y_axis.title = '条数'
chart_nc.y_axis.title = '条数'
chart_fc.x_axis.title = '供应商名称'
chart_nc.x_axis.title = '供应商名称'
data_fc = Reference(ws2, min_col=2, min_row=2, max_col=2, max_row=len(pivot_fc)+1)
data_nc = Reference(ws2, min_col=3, min_row=len(pivot_fc)+3, max_col=3, max_row=len(pivot_nc)*2+2)
categories = Reference(ws2, min_col=1, min_row=2, max_row=len(pivot_fc)+1)
chart_fc.add_data(data_fc, titles_from_data=True)
chart_nc.add_data(data_nc, titles_from_data=True)
chart_fc.set_categories(categories)
chart_nc.set_categories(categories)
ws3.add_chart(chart_fc, 'A1')
ws3.add_chart(chart_nc, 'A15')
# 生成柱状图
chart_bar = BarChart()
chart_bar.title = '条数柱状图'
chart_bar.y_axis.title = '条数'
chart_bar.x_axis.title = '供应商名称'
data_fc = Reference(ws2, min_col=2, min_row=2, max_col=3, max_row=len(pivot_nc)*2+2)
categories = Reference(ws2, min_col=1, min_row=2, max_row=len(pivot_nc)*2+2)
chart_bar.add_data(data_fc, titles_from_data=True)
chart_bar.set_categories(categories)
ws4.add_chart(chart_bar, 'A1')
# 保存 Excel 文件
wb.save('data.xlsx')
```
需要注意的是,这个示例只是一个简单的实现,实际应用中还需要进行更多的输入合法性校验和异常处理。
python代码: 1. 使用excel进行文档管理,A列序号,B列项目名称,C列供应商名称,D列需求总条数,E列FC条数,F列NC条数 2. 可以添加供应商,修改某个供应商的FC条数,NC条数 3. 可以删除某个供应商的数据 4. 可以对同一个文档根据FC条数进行排序 5. 可以对同一个文档根据NC条数进行排序 6. 可以查看某个供应商的数据 7. 需要有输入合法性校验 8. 需要根据C, E列生成数据透视图到新的sheet页 9. 需要根据C, F列生成数据透视图到新的sheet页 10. 需要根据C, E列生成折线图到新的sheet页 11. 需要根据C, F列生成折线图到新的sheet页
这是一个比较复杂的需求,需要使用Python的pandas和openpyxl库来实现。以下是一个初步的代码框架,你可以根据自己的需求进行修改和完善。
```
import pandas as pd
from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference
from openpyxl.utils.dataframe import dataframe_to_rows
# 读取Excel文件
filename = 'document.xlsx'
df = pd.read_excel(filename)
# 添加供应商
def add_supplier(supplier_name):
new_row = pd.DataFrame({'序号': [len(df) + 1], '项目名称': [''], '供应商名称': [supplier_name], '需求总条数': [0], 'FC条数': [0], 'NC条数': [0]})
df = df.append(new_row, ignore_index=True)
return df
# 修改供应商的FC条数和NC条数
def update_supplier(supplier_name, fc_num, nc_num):
df.loc[df['供应商名称'] == supplier_name, 'FC条数'] = fc_num
df.loc[df['供应商名称'] == supplier_name, 'NC条数'] = nc_num
return df
# 删除供应商的数据
def delete_supplier(supplier_name):
df = df[df['供应商名称'] != supplier_name].reset_index(drop=True)
return df
# 根据FC条数和NC条数排序
def sort_by_fc():
df = df.sort_values(by=['FC条数'], ascending=False).reset_index(drop=True)
return df
def sort_by_nc():
df = df.sort_values(by=['NC条数'], ascending=False).reset_index(drop=True)
return df
# 查看某个供应商的数据
def view_supplier(supplier_name):
supplier_data = df[df['供应商名称'] == supplier_name]
return supplier_data
# 生成数据透视表和折线图
def generate_pivot_chart():
# 生成数据透视表
pivot_by_fc = pd.pivot_table(df, index=['供应商名称'], values=['FC条数'], aggfunc=sum)
pivot_by_nc = pd.pivot_table(df, index=['供应商名称'], values=['NC条数'], aggfunc=sum)
# 将数据透视表写入新的sheet页
book = load_workbook(filename)
writer = pd.ExcelWriter(filename, engine='openpyxl')
writer.book = book
pivot_by_fc.to_excel(writer, sheet_name='FC透视表')
pivot_by_nc.to_excel(writer, sheet_name='NC透视表')
# 生成折线图
chart_by_fc = LineChart()
chart_by_fc.title = '供应商FC条数'
chart_by_fc.y_axis.title = '条数'
chart_by_fc.x_axis.title = '供应商'
data = Reference(book['FC透视表'], min_col=2, min_row=2, max_col=2, max_row=len(pivot_by_fc) + 1)
categories = Reference(book['FC透视表'], min_col=1, min_row=2, max_row=len(pivot_by_fc) + 1)
chart_by_fc.add_data(data, titles_from_data=True)
chart_by_fc.set_categories(categories)
chart_by_fc.height = 10
chart_by_fc.width = 20
chart_by_fc.legend = None
chart_by_fc.x_axis.tickLblSkip = 0
book.create_sheet('FC折线图')
book['FC折线图'].add_chart(chart_by_fc)
chart_by_nc = LineChart()
chart_by_nc.title = '供应商NC条数'
chart_by_nc.y_axis.title = '条数'
chart_by_nc.x_axis.title = '供应商'
data = Reference(book['NC透视表'], min_col=2, min_row=2, max_col=2, max_row=len(pivot_by_nc) + 1)
categories = Reference(book['NC透视表'], min_col=1, min_row=2, max_row=len(pivot_by_nc) + 1)
chart_by_nc.add_data(data, titles_from_data=True)
chart_by_nc.set_categories(categories)
chart_by_nc.height = 10
chart_by_nc.width = 20
chart_by_nc.legend = None
chart_by_nc.x_axis.tickLblSkip = 0
book.create_sheet('NC折线图')
book['NC折线图'].add_chart(chart_by_nc)
writer.save()
# 输入合法性校验
def check_input(supplier_name, fc_num, nc_num):
if not isinstance(fc_num, int) or not isinstance(nc_num, int) or fc_num < 0 or nc_num < 0:
return False
if supplier_name in df['供应商名称'].unique():
return True
else:
return False
# 测试代码
supplier_name = '供应商A'
fc_num = 10
nc_num = 20
df = add_supplier(supplier_name)
df = update_supplier(supplier_name, fc_num, nc_num)
df = delete_supplier(supplier_name)
df = sort_by_fc()
df = sort_by_nc()
supplier_data = view_supplier(supplier_name)
generate_pivot_chart()
valid_input = check_input(supplier_name, fc_num, nc_num)
```
阅读全文