微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一列中的多年值

如何解决一列中的多年值

这是我正在使用的数据框: 列名是(从左到右):

Cols = ['Familiy'。'Genus','Species','Latitude','Longitude','Region','distribution','Year']

enter image description here

我试图分为几列的最右边的列是:“年份”。

正如您在我添加的图像的第三行所看到的,有多个名称和年份。这对于我的许多行都是一个问题。我正在尝试找到一个程序,该程序将删除所有非年份的字符,然后添加列,以便每年都在不同的列中。

到目前为止,我已经知道此命令将输出不带字符的所有年份,但是执行该命令后的年份之间没有分隔:

merged['Year'] = merged['Year'].str.replace(r'\D','')

这是该命令的输出

enter image description here

我想如果我能找到一种使用此命令的方式,用逗号分隔年份,那么我可以将这些值分配到不同的列中。

感谢您的帮助。谢谢!!

解决方法

找出一种“ s脚的”解决方案。

发现“ Year”(年份)列最多有7次输入,并用文字包围。

before = merged['Year'].str.split(';').str[0]
after = merged['Year'].str.split(';').str[1]
after2 = merged['Year'].str.split(';').str[2]
after3 = merged['Year'].str.split(';').str[3]
after4 = merged['Year'].str.split(';').str[4]
after5 = merged['Year'].str.split(';').str[5]
after6 = merged['Year'].str.split(';').str[6]
after7 = merged['Year'].str.split(';').str[7]

merged['Observation_1'] = before
merged['Observation_2'] = after
merged['Observation_3'] = after2
merged['Observation_4'] = after3
merged['Observation_5'] = after4
merged['Observation_6'] = after5
merged['Observation_7'] = after6
#merged['Year_8'] = after7

del merged['Year']

merged['Observation_1'] = merged['Observation_1'].str.replace(r'\D','')
merged['Observation_2'] = merged['Observation_2'].str.replace(r'\D','')
merged['Observation_3'] = merged['Observation_3'].str.replace(r'\D','')
merged['Observation_4'] = merged['Observation_4'].str.replace(r'\D','')
merged['Observation_5'] = merged['Observation_5'].str.replace(r'\D','')
merged['Observation_6'] = merged['Observation_6'].str.replace(r'\D','')
merged['Observation_7'] = merged['Observation_7'].str.replace(r'\D','')
#merged['Year_8'] = merged['Year_8'].str.replace(r'\D','')


merged

总之,我在每一列之前将其分开;然后在每个人之后;将它们放在自己的标有'Observation_n'的列中,然后使用最后一个命令分别取出每列中的所有字母。

不是很顺利,但是它完成了工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。