file_data = pd.merge(file_data1, file_data2, how='inner', on=['城区', '户型', '面积'])
时间: 2024-01-12 07:05:15 浏览: 127
这行代码使用了pandas库中的merge函数,将两个数据集(file_data1和file_data2)按照"城区"、"户型"、"面积"这三个列进行内连接。也就是说,只有在这三个列都匹配的情况下,数据才会被合并在一起,否则不会被合并。合并后的结果存储在file_data变量中,可以继续对其进行处理和分析。内连接通常用来筛选出两个数据集中共有的部分,以便后续的分析和处理。
相关问题
import PySimpleGUI as sg import pandas as pd # 定义窗口布局 layout = [ [sg.Text('选择表格文件')], [sg.Input(), sg.FileBrowse(key='file_1'), sg.Text('表格1')], [sg.Input(), sg.FileBrowse(key='file_2'), sg.Text('表格2')], [sg.Button('查找')], [sg.Text('查找结果:')], [sg.Multiline(size=(60, 10), key='result')], [sg.Button('保存结果')] ] # 创建窗口 window = sg.Window('查找表格数据', layout) # 读取数据并查找相同时间段的数据 def find_data(file_1, file_2): try: # 读取表格数据 df_1 = pd.read_csv(file_1) df_2 = pd.read_csv(file_2) # 找到相同时间段的数据 df = pd.merge(df_1, df_2, on='Time', how='inner') # 返回查找结果 return df.to_string(index=False) except Exception as e: return str(e) # 事件循环 while True: event, values = window.read() if event == sg.WINDOW_CLOSED: break elif event == '查找': # 获取用户选择的文件路径 file_1 = values['file_1'] file_2 = values['file_2'] # 查找数据 result = find_data(file_1, file_2) # 在窗口中显示查找结果 window['result'].update(result) elif event == '保存结果': # 获取当前显示的数据 file_1 = values['file_1'] file_2 = values['file_2'] merged = pd.merge(file_1, file_2, on='Time', how='inner') result3 = merged.loc[(merged['Time'] >= '00:00:00') & (merged['Time'] <= '23:59:59')] table_values = window['result3'] # 将数据保存到新的表格中 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_csv(save_file, index=False) sg.popup('保存成功!') # 关闭窗口 window.close() 报错
根据代码,可能会出现以下几个错误:
1. 在保存结果时,代码中没有读取窗口中的数据,因此会报错。需要将代码中的`table_values = window['result3']`修改为`table_values = window['result'].get()`
2. 在保存结果时,代码中使用了`pd.merge`方法,将两个文件路径传入了该方法,而不是读取后的`DataFrame`。需要将代码中的`merged = pd.merge(file_1, file_2, on='Time', how='inner')`修改为`merged = pd.merge(pd.read_csv(file_1), pd.read_csv(file_2), on='Time', how='inner')`
3. 在保存结果时,代码中使用了`table_values[0]`和`table_values[1:]`,但是`table_values`是一个字符串,而不是一个列表。需要将代码中的`save_df = pd.DataFrame(table_values[1:], columns=table_values[0])`修改为`save_df = pd.DataFrame([line.split(',') for line in table_values.split('\n')], columns=table_values.split('\n')[0].split(','))`
报错修正: import PySimpleGUI as sg import pandas as pd # 定义窗口布局 layout = [ [sg.Text('选择表格文件')], [sg.Input(), sg.FileBrowse(key='file_1'), sg.Text('表格1')], [sg.Input(), sg.FileBrowse(key='file_2'), sg.Text('表格2')], [sg.Button('查找')], [sg.Text('查找结果:')], [sg.Multiline(size=(60, 10), key='result')], [sg.Button('保存结果')] ] # 创建窗口 window = sg.Window('查找表格数据', layout) # 读取数据并查找相同时间段的数据 def find_data(file_1, file_2): try: # 读取表格数据 df_1 = pd.read_csv(file_1) df_2 = pd.read_csv(file_2) # 找到相同时间段的数据 df = pd.merge(df_1, df_2, on='Time', how='inner') # 返回查找结果 return df.to_string(index=False) except Exception as e: return str(e) # 事件循环 while True: event, values = window.read() if event == sg.WINDOW_CLOSED: break elif event == '查找': # 获取用户选择的文件路径 file_1 = values['file_1'] file_2 = values['file_2'] # 查找数据 result = find_data(file_1, file_2) # 在窗口中显示查找结果 window['result'].update(result) elif event == '保存结果': # 获取当前显示的数据 table_values = window['result'].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('保存成功!')
这份代码有一个小问题,就是在保存结果的时候,需要将结果按照逗号分隔的形式传递给 DataFrame,而不是直接传递整个字符串。修改代码如下:
```python
import PySimpleGUI as sg
import pandas as pd
# 定义窗口布局
layout = [
[sg.Text('选择表格文件')],
[sg.Input(), sg.FileBrowse(key='file_1'), sg.Text('表格1')],
[sg.Input(), sg.FileBrowse(key='file_2'), sg.Text('表格2')],
[sg.Button('查找')],
[sg.Text('查找结果:')],
[sg.Multiline(size=(60, 10), key='result')],
[sg.Button('保存结果')]
]
# 创建窗口
window = sg.Window('查找表格数据', layout)
# 读取数据并查找相同时间段的数据
def find_data(file_1, file_2):
try:
# 读取表格数据
df_1 = pd.read_csv(file_1)
df_2 = pd.read_csv(file_2)
# 找到相同时间段的数据
df = pd.merge(df_1, df_2, on='Time', how='inner')
# 返回查找结果
return df
except Exception as e:
return str(e)
# 事件循环
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
elif event == '查找':
# 获取用户选择的文件路径
file_1 = values['file_1']
file_2 = values['file_2']
# 查找数据
result = find_data(file_1, file_2)
# 在窗口中显示查找结果
window['result'].update(result.to_string(index=False))
elif event == '保存结果':
# 获取当前显示的数据
table_values = window['result'].get().split('\n')
table_values = [row.split(',') for row in table_values]
# 将数据保存到新的表格中
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_csv(save_file, index=False)
sg.popup('保存成功!')
```
这样就可以正确地保存结果了。
阅读全文