鱼C论坛

 找回密码
 立即注册
查看: 3060|回复: 23

小白求助,求帮忙!!! 全部鱼币献上!

[复制链接]
发表于 2020-2-23 22:40:48 | 显示全部楼层 |阅读模式
12鱼币
本帖最后由 Jamesonwjt 于 2020-2-24 23:16 编辑

求问:

如果这是两个不同的表格1,2

表格1的空缺值可以在表格2当中找到;csv1空缺值7-12在csv2的最后面可以找到,且每一行的数据除空缺值之外都是一样的。

我只是对这个表格做了处理,把这些需要填充的空值项放到了最后,但是如果空值项和它对应的填充项分布在表格的不同地方,该怎么办?

怎么可以实现两个表格自动匹配所在行内空值之外的数据,对空值进行填充?

不知道有没有上传成功照片,以zip file的数据为准

求python大佬们指点

谢谢啦

k.png
i.png

Desktop.zip

128.78 KB, 下载次数: 7

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

使用道具 举报

发表于 2020-2-24 16:32:54 | 显示全部楼层
数据是在Excel表格里面吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-24 16:52:27 | 显示全部楼层
通过第一行的表头去匹配位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-24 19:32:53 From FishC Mobile | 显示全部楼层
xiangzhihengkan 发表于 2020-2-24 16:32
数据是在Excel表格里面吗?

嗯,是的是两个csv,如果可以的话可以写一下代码吗?跪谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-24 19:33:28 From FishC Mobile | 显示全部楼层
shake_a_tree@16 发表于 2020-2-24 16:52
通过第一行的表头去匹配位置

可以一下大致代码吗,跪谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-24 20:43:53 | 显示全部楼层
表格2不也是在4-7行吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-24 21:34:45 From FishC Mobile | 显示全部楼层
fan1993423 发表于 2020-2-24 20:43
表格2不也是在4-7行吗?

我这个是假设第一个dataframe和第二个dataframe不是同一行的,且是两个不同的csv。如果有思路的话,可以写一下码子吗,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-24 21:48:22 | 显示全部楼层
要不,你发两个csv上来吧,不要求数据好多,有几行就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-24 23:18:33 | 显示全部楼层
fan1993423 发表于 2020-2-24 21:48
要不,你发两个csv上来吧,不要求数据好多,有几行就行

谢谢回复,我上传了一个zip,之后重新发布了一遍问题,如果我的描述您不明白,可以加个好友单独说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 01:14:04 | 显示全部楼层
我自己编了个数据举了个例子,用了比较笨拙的办法,如果有更好的办法,我在提出来。
  1. import pandas as pd
  2. import numpy as np
  3. df1=pd.DataFrame({'age':[41,np.nan,38,27],'name':['bill','david','cook','anna'],'sex':['male','male','male','female']})
  4. df2=pd.DataFrame({'age':[34,41,np.nan,np.nan],'name':['david','bill','anna','cook'],'sex':['male','male','female','male']})
  5. name2=df2[df2['age'].isnull()]['name']
  6. for i2 in name2:
  7.     index2=df2['name'].values.tolist().index(i2)
  8.     index1=df1['name'].values.tolist().index(i2)
  9.     df2['age'][index2]=df1['age'][index1]
  10. print(df2)
复制代码

df1是一样的,考虑两个表只需要知道一个表就行,就不做df1了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 01:22:52 | 显示全部楼层
下载了不知道你问题解决没有,太晚了,明天撸代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-25 04:41:24 | 显示全部楼层
fan1993423 发表于 2020-2-25 01:14
我自己编了个数据举了个例子,用了比较笨拙的办法,如果有更好的办法,我在提出来。
df1是一样的,考虑两 ...

好像还是不行。我把我的两个文件给您吧。在我的云盘,这个是链接 https://share.weiyun.com/559IlxO   这个是原件。

在这个里面需要用150k的那个文件里面的variety把另外一个文件的variety的空值给填充起来。

真的是太感谢您了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-25 04:43:13 | 显示全部楼层
_摆架_回宫、 发表于 2020-2-25 01:22
下载了不知道你问题解决没有,太晚了,明天撸代码。

https://share.weiyun.com/559IlxO

在这个文件里面,这个是原件,之前的那个是我举的例子。

这个文件的要求是,用150k表格里面的variety去把另外一个文件的variety的空值填充满。

谢谢您的帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 06:25:52 | 显示全部楼层
你可以将表格空缺位置=下面的内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 07:16:42 | 显示全部楼层
  1. import pandas as pd
  2. import easygui as g

  3. source_file = g.fileopenbox(msg=None, title='Select Source', default="*.xlsx", filetypes=None, multiple=False)
  4. df_source = pd.read_excel(source_file, sheet_name=0)

  5. source_dict = {}
  6. cols = ['Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Embarked']
  7. df_list = df_source[cols]

  8. for index, row in df_list.iterrows():
  9.     key = (row['Survived'], row['Pclass'], row['Name'])
  10.     value = [row['Sex'], row['Age'], row['SibSp']]

  11.     source_dict[key] = value

  12. print(source_dict)

  13. # 参照下面的代码,读取新的文件,创建新的 df, 根据字典更新对应的行,在保存 excel
  14. # key = row['类型']
  15. #     elements = row['含有元素'].split(',')

  16. #     for elem in elements:
  17. #         result[elem] = result.get(elem, list())
  18. #         result[elem].append(fruit)

  19. # # intialise data of lists.
  20. # data = {'元素':[], '水果':[]}
  21. # for key, value in result.items():
  22. #     data['元素'].append(key)
  23. #     data['水果'].append(','.join(value))

  24. # new_df = pd.DataFrame(data)

  25. # writer = pd.ExcelWriter(excel_file, engine='xlsxwriter')
  26. # df.to_excel(writer, sheet_name='Sheet1', index=False)
  27. # new_df.to_excel(writer, sheet_name='Sheet2', index=False)
  28. # writer.save()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 13:53:05 | 显示全部楼层
Jamesonwjt 发表于 2020-2-24 19:32
嗯,是的是两个csv,如果可以的话可以写一下代码吗?跪谢

你附带的Desktop.zip中csv1中缺失的在csv2中是全有吗?写完代码之后发现并没有全部都有数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 14:04:57 | 显示全部楼层
本帖最后由 _摆架_回宫、 于 2020-2-25 14:12 编辑
Jamesonwjt 发表于 2020-2-25 04:43
https://share.weiyun.com/559IlxO

在这个文件里面,这个是原件,之前的那个是我举的例子。

  1. import pandas as pd



  2. csv1 = pd.read_excel('csv1.xlsx')
  3. csv2 = pd.read_excel('csv2.xlsx')


  4. result = pd.merge(csv1['Name'],
  5.                   csv2[['Survived','Pclass','Name','Sex','Age','SibSp','Parch','Ticket','Fare','Embarked']],
  6.                   on='Name',
  7.                   how='outer')
  8. result.to_excel('csv3.xlsx')


复制代码

最佳答案,请看附件

csv3.zip

56.46 KB, 下载次数: 4

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

使用道具 举报

发表于 2020-2-25 14:13:07 | 显示全部楼层

能用5行代码搞定绝不用50行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 16:30:09 | 显示全部楼层
我这个试了没问题,不过最好的解法确实利用pandas的本性,就是18楼的解法是最好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 16:58:18 | 显示全部楼层
fan1993423 发表于 2020-2-25 16:30
我这个试了没问题,不过最好的解法确实利用pandas的本性,就是18楼的解法是最好的

numpy不会,哈哈,所以你写的方法看不懂。
pandas如果没有这个连接的方法,其实可以直接for row in csv2.iterrows():
能简单绝不搞复杂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 08:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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