鱼C论坛

 找回密码
 立即注册
查看: 488|回复: 8

求指导

[复制链接]
发表于 2023-11-3 08:31:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# coding=utf-8
# import pandas as pd
# may_df = pd.read_csv('may.csv')
# june_df = pd.read_csv('june.csv')
#
# merged = pd.merge(may_df,june_df,on="states",how = 'outer',suffixes=('_ahead','behind'),indicator=True)
# # find change
# changed_rows = merged[merged['_merge']!='both']
# # find new lines
# new_rows = merged[merged['_merge']=='right_only']
# print(new_rows)
#

import pandas as pd
from tqdm import tqdm

# # 读取两张表
# df1 = pd.read_csv('may.csv')
# df2 = pd.read_csv('june.csv')
#
# # 筛选出location、project_name、building、unit、high和room相同的行
# cols = ['location', 'project_name', 'building', 'unit', 'high', 'room']
# df1_grouped = df1.groupby(cols).first().reset_index()
# df2_grouped = df2.groupby(cols).first().reset_index()
#
# # 将df1_grouped和df2_grouped合并,并比较states列的值
# df = pd.DataFrame(columns=df1.columns)
# for index, row1 in tqdm(df1_grouped.iterrows(), total=len(df1_grouped)):
#     for _, row2 in df2_grouped.iterrows():
#         if row1['location'] == row2['location'] and \
#                 row1['project_name'] == row2['project_name'] and \
#                 row1['building'] == row2['building'] and \
#                 row1['unit'] == row2['unit'] and \
#                 row1['high'] == row2['high'] and \
#                 row1['room'] == row2['room'] and \
#                 row1['states'] != row2['states']:
#             df = df.append(row1)
#
# # 输出结果
# print(df)

import pandas as pd
from tqdm import tqdm

# 读取两张表
df1 = pd.read_excel('D:\一介书生资料库\爬虫:八爪鱼\各市县整体市场\shujuchuli\七月三亚.xlsx')
df2 = pd.read_excel('D:\一介书生资料库\爬虫:八爪鱼\各市县整体市场\shujuchuli\八月三亚.xlsx')

# 筛选出location、project_name、building、unit、high和room相同的行,并选择指定的列
cols = ['区域', '项目名称', '楼盘', '单元', '楼层', '房间', '建筑面积', '房型', '挂牌清水价', '挂牌装修价']
df1_grouped = df1.groupby(cols).first().reset_index()
df2_grouped = df2.groupby(cols).first().reset_index()

# 合并两张表,并筛选出states有变化的行
df_merged = pd.concat([df1_grouped, df2_grouped])
df_duplicates = df_merged[df_merged.duplicated(cols, keep=False)]
df_changed = df_duplicates.loc[df_duplicates['状态'] != df_duplicates['状态']]

# 输出结果
df_changed.to_excel('D:\pydata\data.xlsx', index=False)
print(df_changed)


表格标题为:区域        项目名称        楼盘        单元        楼层        房间        建筑面积        房屋用途        房型        挂牌清水价        挂牌装修价        产品类型        状态        商品房预售许可证        发证日期


提示错误:
D:\PythonProject\pythonProject\Scripts\python.exe E:\qycache\xuexi\pythonProject\房地产\process(版本2.3).py
D:\PythonProject\pythonProject\lib\site-packages\numpy\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:
D:\PythonProject\pythonProject\lib\site-packages\numpy\.libs\libopenblas.EL2C6PLE4ZYW3ECEVIV3OXXGRN2NRFM2.gfortran-win_amd64.dll
D:\PythonProject\pythonProject\lib\site-packages\numpy\.libs\libopenblas64__v0.3.21-gcc_10_3_0.dll
  warnings.warn("loaded more than 1 DLL from .libs:"
Traceback (most recent call last):
  File "D:\PythonProject\pythonProject\lib\site-packages\pandas\core\indexes\base.py", line 3652, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas\_libs\index.pyx", line 147, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\index.pyx", line 176, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 7080, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas\_libs\hashtable_class_helper.pxi", line 7088, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: '状态'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "E:\qycache\xuexi\pythonProject\房地产\process(版本2.3).py", line 57, in <module>
    df_changed = df_duplicates.loc[df_duplicates['状态'] != df_duplicates['状态']]
  File "D:\PythonProject\pythonProject\lib\site-packages\pandas\core\frame.py", line 3761, in __getitem__
    indexer = self.columns.get_loc(key)
  File "D:\PythonProject\pythonProject\lib\site-packages\pandas\core\indexes\base.py", line 3654, in get_loc
    raise KeyError(key) from err
KeyError: '状态'

进程已结束,退出代码1

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-3 08:31:53 | 显示全部楼层
根据您提供的代码和错误提示,问题出在 df_duplicates.loc[df_duplicates['状态'] != df_duplicates['状态']] 这一行。错误提示显示KeyError: '状态',说明在DataFrame中找不到名为'状态'的列。

解决方法:
1. 首先,检查您的DataFrame中是否存在名为'状态'的列。可以通过 print(df_duplicates.columns) 打印出所有列名,确认是否存在'状态'列。
2. 如果确实存在'状态'列,那么可能是列名的格式问题。请检查列名是否与代码中的列名一致,包括大小写和空格。
3. 如果列名正确,那么可能是数据中存在缺失值或其他异常值导致的问题。可以尝试使用 df_duplicates.dropna() 删除缺失值,或者使用其他方法处理异常值。

另外,您还提到了警告信息 UserWarning: loaded more than 1 DLL from .libs 。这是由于NumPy加载了多个DLL文件导致的警告,一般不会影响代码的执行,可以忽略该警告。

请根据以上提示检查代码和数据,如果问题仍然存在,请提供更多的信息,例如数据样本和完整的错误提示。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-3 08:33:31 | 显示全部楼层
指导:新手乐园

根据你提供的代码和错误信息,我注意到以下问题:

1. 错误信息中提到了一个KeyError,即找不到'状态'列。这可能是因为两个表格中没有名为'状态'的列。请确保表格中存在该列,并使用正确的列名来进行比较。

2. 在合并两张表格之前,你需要确认两个表格中相同行的定义。目前你使用了locationproject_namebuildingunithighroom这些列来进行筛选,但我注意到在后续的代码中,你使用了不同的列名。请确认列名的一致性,并将其用于合并和筛选操作。

3. 你可以使用pandas库的duplicated()函数来找到重复行,然后再通过判断'状态'列的值是否相等来确定是否发生变化。请确保在使用duplicated()函数时,传入正确的列名作为参数。

4. 最后,你可以使用to_excel()函数将结果保存到Excel文件中,但请确保你提供的保存路径是有效的,并且具有写入权限。

考虑到以上问题,我修改了你的代码,并进行了注释说明,希望能帮助到你:
import pandas as pd# 读取两张表格df1 = pd.read_excel('D:\一介书生资料库\爬虫:八爪鱼\各市县整体市场\shujuchuli\七月三亚.xlsx')df2 = pd.read_excel('D:\一介书生资料库\爬虫:八爪鱼\各市县整体市场\shujuchuli\八月三亚.xlsx')# 筛选出相同的行,并选择指定的列cols = ['区域', '项目名称', '楼盘', '单元', '楼层', '房间', '建筑面积', '房屋用途', '房型', '挂牌清水价', '挂牌装修价']df1_grouped = df1.groupby(cols).first().reset_index()df2_grouped = df2.groupby(cols).first().reset_index()# 合并两张表格df_merged = pd.concat([df1_grouped, df2_grouped])# 找到发生变化的行df_duplicates = df_merged[df_merged.duplicated(cols, keep=False)]df_changed = df_duplicates[df_duplicates['状态_x'] != df_duplicates['状态_y']]# 输出结果df_changed.to_excel('D:\pydata\data.xlsx', index=False)print(df_changed)
请根据你的实际需求和数据情况进行适当调整。希望这能帮助到你!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-3 08:37:32 | 显示全部楼层
Mike_python小 发表于 2023-11-3 08:33
指导:新手乐园

根据你提供的代码和错误信息,我注意到以下问题:

不行 还是提示错误 没有找到状态 表格是有状态那列的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-3 08:37:51 | 显示全部楼层
一介书生423 发表于 2023-11-3 08:37
不行 还是提示错误 没有找到状态 表格是有状态那列的

错误提示

D:\PythonProject\pythonProject\Scripts\python.exe E:\qycache\xuexi\pythonProject\房地产\process(版本2.3).py
D:\PythonProject\pythonProject\lib\site-packages\numpy\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:
D:\PythonProject\pythonProject\lib\site-packages\numpy\.libs\libopenblas.EL2C6PLE4ZYW3ECEVIV3OXXGRN2NRFM2.gfortran-win_amd64.dll
D:\PythonProject\pythonProject\lib\site-packages\numpy\.libs\libopenblas64__v0.3.21-gcc_10_3_0.dll
  warnings.warn("loaded more than 1 DLL from .libs:"
Traceback (most recent call last):
  File "D:\PythonProject\pythonProject\lib\site-packages\pandas\core\indexes\base.py", line 3652, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas\_libs\index.pyx", line 147, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\index.pyx", line 176, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 7080, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas\_libs\hashtable_class_helper.pxi", line 7088, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: '状态_x'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "E:\qycache\xuexi\pythonProject\房地产\process(版本2.3).py", line 59, in <module>
    df_changed = df_duplicates[df_duplicates['状态_x'] != df_duplicates['状态_y']]
  File "D:\PythonProject\pythonProject\lib\site-packages\pandas\core\frame.py", line 3761, in __getitem__
    indexer = self.columns.get_loc(key)
  File "D:\PythonProject\pythonProject\lib\site-packages\pandas\core\indexes\base.py", line 3654, in get_loc
    raise KeyError(key) from err
KeyError: '状态_x'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-3 08:38:31 | 显示全部楼层
Mike_python小 发表于 2023-11-3 08:33
指导:新手乐园

根据你提供的代码和错误信息,我注意到以下问题:

表格标题为:区域        项目名称        楼盘        单元        楼层        房间        建筑面积        房屋用途        房型        挂牌清水价        挂牌装修价        产品类型        状态        商品房预售许可证        发证日期
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-3 08:42:53 | 显示全部楼层
isdkz 发表于 2023-11-3 08:31
根据您提供的代码和错误提示,问题出在 df_duplicates.loc[df_duplicates['状态'] != df_duplicates['状态' ...

可否留个邮箱发送表格和代码给你帮我看看呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-3 08:53:10 | 显示全部楼层
isdkz 发表于 2023-11-3 08:31
根据您提供的代码和错误提示,问题出在 df_duplicates.loc[df_duplicates['状态'] != df_duplicates['状态' ...

求留个邮箱 发送数据源
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-3 08:54:51 | 显示全部楼层
一介书生423 发表于 2023-11-3 08:53
求留个邮箱 发送数据源


                               
登录/注册后可看大图

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-1 22:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表