首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本Pandas数据分析:连接数据类型

基本Pandas数据分析:连接数据类型
EN

Stack Overflow用户
提问于 2016-02-25 07:45:12
回答 4查看 214关注 0票数 1

我加载了一个数据帧,其中有一个名为natvty的变量,它是50 - 600之间的数字的频率。每个数字代表一个国家,并且每个国家多次出现。我计算了每个国家出现在列表中的次数。现在我想用国家的名称替换国家的数字,例如(57 =美国)。我尝试了各种for循环,但都无济于事。到目前为止,这是我的代码。在值计数表中,国家/地区编号在左侧,它在数据中出现的次数在右侧。我需要将左边的数字替换为国家名称。与国家名称对应的数字显示在外部excel表格中,分两列显示。谢谢。

EN

回答 4

Stack Overflow用户

发布于 2016-02-25 08:20:42

我认为一开始可能没有需要用国家名称来代替国家数字。由于您现在有两个表,一个包含列["country_number", "natvty"],另一个(您的excel表,可以导出为.csv文件并由pandas读取)包含列["country_number", "country_name"],因此您只需将这两个表连接起来并保留它们。结果表将有3列:分别为["country_number", "natvty", "country_name"]

代码语言:javascript
复制
import pandas as pd

df_nav    = pd.read_csv("my_natvty.csv")
df_cnames = pd.read_csv("excel_country_names.csv") # or use pd.read_excel("country_names.xlsx") directly on excel files

df_nav_with_cnames = df_nav.join(df_cnames, on='country_number')

确保它们都有一个列"country_number"。您可以手动修改数据源文件中的表头,也可以将其视为index columns来类似地应用join。这个概念有点像关系数据库中的SQL操作。

文档:http://pandas.pydata.org/pandas-docs/stable/merging.html

票数 1
EN

Stack Overflow用户

发布于 2016-02-25 09:27:43

对于这类事情,我总是更喜欢使用map函数,它需要一个字典,或者是一个函数。

代码语言:javascript
复制
import pandas as pd
import numpy.random as np
In [12]:

print 
# generate data
df = pd.DataFrame(data={'natvty':np.randint(low=20,high=500,size=10),
                        'country':pd.Series([1,2,3,3,3,2,1,1,2,3])})
df
   country  natvty
0        1      24
1        2     310
2        3      88
3        3     459
4        3      38
5        2      63
6        1     194
7        1     384
8        2     281
9        3     360

然后是dict。在这里我只需输入它,但您可以从csv或excel文件中加载它。然后,您需要将键设置为索引,并将结果序列转换为字典(to_dict())。

代码语言:javascript
复制
countrymap = {1:'US',2:'Canada',3:'Mexico'}

然后,您可以简单地map值标签。

代码语言:javascript
复制
df.country.map(countrymap)
Out[10]:
0        US
1    Canada
2    Mexico
3    Mexico
4    Mexico
5    Canada
6        US
7        US
8    Canada
9    Mexico
Name: country, dtype: objec
票数 1
EN

Stack Overflow用户

发布于 2016-02-25 08:47:31

注意:这里的基本思想与相同。我只是想演示如何在两个数据框中处理不同的列名,以及如何检索您想要的每个国家的频率。

您有一个包含国家代码的数据框,以及另一个将国家代码映射到国家名称的数据框。您只需在国家/地区代码列中加入它们。您可以阅读有关merging in PandasSQL joins的更多信息。

代码语言:javascript
复制
import pandas as pd

# this is your nativity frame
nt = pd.DataFrame([
    [123],
    [123],
    [456],
    [789],
    [456],
    [456]
], columns=('natvty',))

# this is your country code map
# in reality, use pd.read_excel
cc = pd.DataFrame([
    [123, 'USA'],
    [456, 'Mexico'],
    [789, 'Canada']
], columns=('country_code', 'country_name'))

# perform a join
# now each row has an associated country_name
df = nt.merge(cc, left_on='natvty', right_on='country_code')

# now you can get frequencies on country names instead of country codes
print df.country_name.value_counts(sort=False)

上面的输出是

代码语言:javascript
复制
Canada    1
USA       2
Mexico    3
Name: country_name, dtype: int64
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35615515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档