df1=pd.read_excel(output_file) df1["日期"] = df1["日期"].fillna(["日期转化"]). 报错"value" parameter must be a scalar or dict, but you passed a "list"
时间: 2023-11-03 14:51:15 浏览: 45
这个错误是因为在fillna函数中,"value"参数只能接受一个标量值或者字典,而不能传递一个列表。你可以尝试将["日期转化"]改为单个值,如"日期转化"。这样应该可以解决这个报错。下面是修改后的代码示例:
```python
df1["日期"] = df1["日期"].fillna("日期转化")
```
希望能帮到你!如果有其他问题,请随时提问。
相关问题
import pandas as pd import xlwt # 对xls文件进行改写 path = r'F:\UserYan\testfile\ts.xlsx' path1 = r'F:\UserYan\testfile\cjia.xlsx' # 读取Excel文件 df = pd.read_excel(path,header=0).fillna({'价格':15,'单位':'个'}) df1 = pd.read_excel(path1,header=0) wj =pd.merge(df1,df,how='left',left_on='id',right_on='id') data = wj.values # 二维数组转excel储存 def transformation(col,data): workbook = xlwt.Workbook(encoding='utf-8',style_compression=0) sheet = workbook.add_sheet("Sheet") for i in range(len(col)): sheet.write(0, i, col[i]) for i in range(1, len(data) + 1, 1): for j in range(len(data[i - 1])): sheet.write(i, j, data[i - 1][j]) workbook.save(r'F:\UserYan\testfile\hb.xlsx') print("保存成功") col = ('id', '名称', '生产地', '价格', '单位', '数量', '总价') transformation(col,data) 这个功能用java怎么实现
这个功能用Java可以通过Apache POI库实现。下面是Java代码实现:
```java
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
public class ExcelUtils {
public static void writeToExcel(String[] col, Object[][] data, String filePath) {
Workbook workbook = new HSSFWorkbook();
HSSFSheet sheet = (HSSFSheet) workbook.createSheet("Sheet");
//设置列名的样式
Font font = workbook.createFont();
font.setBold(true);
CellStyle style = workbook.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
style.setFont(font);
//写入列名
HSSFRow row = sheet.createRow(0);
for(int i = 0; i < col.length; i++) {
row.createCell(i).setCellValue(col[i]);
row.getCell(i).setCellStyle(style);
}
//写入数据
for(int i = 0; i < data.length; i++) {
row = sheet.createRow(i+1);
for(int j = 0; j < data[i].length; j++) {
row.createCell(j).setCellValue(data[i][j].toString());
}
}
//保存文件
try {
FileOutputStream fos = new FileOutputStream(new File(filePath));
workbook.write(fos);
fos.close();
System.out.println("保存成功");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String path = "F:\\UserYan\\testfile\\ts.xlsx";
String path1 = "F:\\UserYan\\testfile\\cjia.xlsx";
String outputPath = "F:\\UserYan\\testfile\\hb.xlsx";
//读取Excel文件
Object[][] data = null;
try {
Workbook wb1 = WorkbookFactory.create(new File(path));
Workbook wb2 = WorkbookFactory.create(new File(path1));
//左连接
//注意:POI中的行和列索引都是从0开始的,所以这里的id列索引需要减1
data = ExcelUtils.merge(wb1.getSheetAt(0), wb2.getSheetAt(0), 0, 0, 6);
} catch (IOException e) {
e.printStackTrace();
}
//写入Excel文件
String[] col = {"id", "名称", "生产地", "价格", "单位", "数量", "总价"};
ExcelUtils.writeToExcel(col, data, outputPath);
}
public static Object[][] merge(HSSFSheet sheet1, HSSFSheet sheet2, int idIndex1, int idIndex2, int columns) {
//获取行数和列数
int rowCount1 = sheet1.getLastRowNum() - sheet1.getFirstRowNum() + 1;
int rowCount2 = sheet2.getLastRowNum() - sheet2.getFirstRowNum() + 1;
//定义一个二维数组,用于存储连接后的数据
Object[][] data = new Object[rowCount2][columns];
int k = 0;
//遍历sheet2的每一行
for(int i = 0; i < rowCount2; i++) {
HSSFRow row2 = sheet2.getRow(i);
Object[] rowData = new Object[columns];
//将当前行的数据复制到rowData中
for(int j = 0; j < columns; j++) {
rowData[j] = row2.getCell(j).toString();
}
//在sheet1中查找id相同的行,并将它们合并
for(int j = 1; j < rowCount1; j++) {
HSSFRow row1 = sheet1.getRow(j);
if(row1.getCell(idIndex1).toString().equals(rowData[idIndex2].toString())) {
for(int l = 0; l < columns; l++) {
rowData[l] = (l == idIndex2) ? rowData[l] : row1.getCell(l).toString();
}
break;
}
}
//将合并后的数据存储到data中
data[k++] = rowData;
}
return data;
}
}
```
需要注意的是,这个Java代码中用到了Apache POI库,因此需要先将POI的jar包导入到项目中。
该程序用的界面显示数据无法显示请修改: import pandas as pd import PySimpleGUI as sg # 定义窗口布局 layout = [ [sg.Text('选择第一个表格文件:', size=(20, 1)), sg.Input(key='file1'), sg.FileBrowse()], [sg.Text('选择第二个表格文件:', size=(20, 1)), sg.Input(key='file2'), sg.FileBrowse()], [sg.Button('查找相同时间段数据', justification='center')], [sg.Output(size=(80, 20), font=("Adobe 宋体 Std L", 10)),sg.Combo(['Method 1', 'Method 2'])], [sg.Table(values=[], headings=[], key='table3')], [sg.Button('保存数据')] ] # 创建窗 window = sg.Window('查找相同时间段数据', layout) # 当窗口打开时执行的代码 while True: event, values = window.read() if event == sg.WINDOW_CLOSED: break elif event == '查找相同时间段数据': # 获取用户选择的文件路径 file1 = values['file1'] file2 = values['file2'] # 读取两个表格的数据 df1 = pd.read_csv(file1) df2 = pd.read_csv(file2) # 按照时间段合并两个 DataFrame 对象 merged_df = pd.merge(df1, df2, on='Time') # 将合并后的数据显示在表格中 headings = merged_df.columns.tolist() values = merged_df.values.tolist() window['table3'].update(values=values) elif event == '保存数据': # 获取当前显示的数据 table_values = window['table3'].get() # 将数据保存到新的表格中 save_file = sg.popup_get_file('保存文件', save_as=True, default_extension='.csv') if save_file: save_df = pd.DataFrame(table_values[1:], columns=table_values[0]) save_df.to_excel(save_file, index=False) sg.popup('保存成功!')
可以尝试将代码中的 `sg.Table` 改为 `sg.Table(values=[], headings=[], key='table3', enable_events=True, bind_return_key=True)`,并添加一个响应事件的代码块,如下所示:
```
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
elif event == '查找相同时间段数据':
# 获取用户选择的文件路径
file1 = values['file1']
file2 = values['file2']
# 读取两个表格的数据
df1 = pd.read_csv(file1)
df2 = pd.read_csv(file2)
# 按照时间段合并两个 DataFrame 对象
merged_df = pd.merge(df1, df2, on='Time')
# 将合并后的数据显示在表格中
headings = merged_df.columns.tolist()
values = merged_df.values.tolist()
window['table3'].update(values=values, headings=headings)
elif event == 'table3':
selected_row = values['table3'][0]
sg.popup(f'您选择的行是:{selected_row}')
elif event == '保存数据':
# 获取当前显示的数据
table_values = window['table3'].get()
# 将数据保存到新的表格中
save_file = sg.popup_get_file('保存文件', save_as=True, default_extension='.csv')
if save_file:
save_df = pd.DataFrame(table_values[1:], columns=table_values[0])
save_df.to_excel(save_file, index=False)
sg.popup('保存成功!')
```
这样就可以让用户选择表格中的某一行,并弹出一个提示框显示选择的行号。同时,表格的 `headings` 参数也需要设置为 DataFrame 的列名,这样表格的列名才能正确显示。
阅读全文