Python3.x中按年份划分的最常见名称
我有一个名为(JMÉNO)、年份的csv excel文件,我需要编写一个函数Python3.x中按年份划分的最常见名称,python,python-3.x,Python,Python 3.x,我有一个名为(JMÉNO)、年份的csv excel文件,我需要编写一个函数names_chart(year,filename,n),它将写入一年中最常见的名称(n)的计数(根据文件中的数据)。我已经写了一个代码,可以写最常见的名字,但是没有年份参数。 有人能帮我解决这个问题吗 csv文件的一部分: 代码: 重新导入 def过程_单词(单词,单词): 如果len(word)
names_chart(year,filename,n)
,它将写入一年中最常见的名称(n)的计数(根据文件中的数据)。我已经写了一个代码,可以写最常见的名字,但是没有年份参数。
有人能帮我解决这个问题吗
csv文件的一部分:
代码:
重新导入
def过程_单词(单词,单词):
如果len(word)<4:
返回
w=字。下()
如果w大写:
字[w]+=1
其他:
字[w]=1
def get_单词(文本):
单词={}
对于re.findall中的w(“\w+”,文本):
过程字(w,字)
回话
def读入(文件名):
将open(filename,“r”,encoding=“utf-8”)作为f:
返回f.read()
def打印顶部(字数、计数):
排序的名称=排序的(单词,关键字=words.get,反向=True)
对于排序名称中的w[:计数]:
打印(w,字[w])
def名称图表(年份、文件名、n):
text=读入(文件名)
单词=获取单词(文本)
打印顶部(文字,n)
姓名图表(1987年,“du06_jmena.csv”,第10页)
是一个重要的数据分析库。使用DataFrames,我们可以将分析简化为单个函数。由于未指定输出类型,我们将返回名称、值对的列表:
import pandas as pd
def names_chart (year, filename, n, get_df=False):
"""Return the n most common names of a given year as a list of tuples."""
# Input processing
if isinstance(year, int):
year = str(year)
names = "JMÉNO"
# pandas: find indices in `df` that are most common names/year (condition)
# Return only the names and given year columns
df = pd.read_csv(filename, sep=",", encoding='latin1')
condition = df[year].nlargest(n).index
top_names_per_year = df.loc[condition, [names, year]]
# Output processing
if get_df:
return top_names_per_year
return top_names_per_year.values.tolist()
您现在可以通过列表
访问数据:
names_chart (2011, "./@data/gistfile1.txt", 3)
# Output (List, default):
[['AARON', 4], ['AARIAN KAMER', 1], ['A-MI', 0]]
您可以选择使用get\u df=True
返回数据帧对象的top\u names\u per\u year
。数据帧还有更多
结果子集显示指数、名称列和年列中相应的最大频率。是数据分析的重要库。使用DataFrames,我们可以将分析简化为单个函数。由于未指定输出类型,我们将返回名称、值对的列表:
import pandas as pd
def names_chart (year, filename, n, get_df=False):
"""Return the n most common names of a given year as a list of tuples."""
# Input processing
if isinstance(year, int):
year = str(year)
names = "JMÉNO"
# pandas: find indices in `df` that are most common names/year (condition)
# Return only the names and given year columns
df = pd.read_csv(filename, sep=",", encoding='latin1')
condition = df[year].nlargest(n).index
top_names_per_year = df.loc[condition, [names, year]]
# Output processing
if get_df:
return top_names_per_year
return top_names_per_year.values.tolist()
您现在可以通过列表
访问数据:
names_chart (2011, "./@data/gistfile1.txt", 3)
# Output (List, default):
[['AARON', 4], ['AARIAN KAMER', 1], ['A-MI', 0]]
您可以选择使用get\u df=True
返回数据帧对象的top\u names\u per\u year
。数据帧还有更多
结果子集显示指数、一列名称和年列中相应的最大频率。我也会使用熊猫,但方式不同
我会这样写我的函数:
def common_names(year, filename, N):
yearcol = str(year)
namecol = 'JMÉNO'
df = (
pandas.read_csv(filename)
.sort_values(by=[yearcol], ascending=False)
.head(N)
)[[namecol, yearcol]]
return df
我也会用熊猫来做这个,但方式不同
我会这样写我的函数:
def common_names(year, filename, N):
yearcol = str(year)
namecol = 'JMÉNO'
df = (
pandas.read_csv(filename)
.sort_values(by=[yearcol], ascending=False)
.head(N)
)[[namecol, yearcol]]
return df
为什么不订一本词典,每年一本呢?主循环需要决定(基于year参数)将给定名称记录在哪个字典中(如果该年份尚未出现,则生成一个新字典)。由于这似乎是家庭作业,我将为您留下详细信息。您能在这里发布实际CSV的一部分吗?也许只有几行?这也可以简单地用,它可以将文件读入数据帧并执行各种操作,例如查找最频繁的值df['item'].value_counts().idxmax()
。提供数据集的要点,可能会有人帮助您。谢谢您的回答。给约翰·科尔曼:我不确定我应该在哪个职能部门做这件事。你能给我一个提示吗?要不是机器人:只有一列名为逗号年逗号年。。。。与所附的截图完全相同。对pylang:我相信,没有任何其他库(?)有更简单的方法来实现它。你在github上吗?您可以发布数据集的一部分。给出一些数据,就可以证明熊猫是多么容易相处。为什么不编一本字典,每年编一本呢?主循环需要决定(基于year参数)将给定名称记录在哪个字典中(如果该年份尚未出现,则生成一个新字典)。由于这似乎是家庭作业,我将为您留下详细信息。您能在这里发布实际CSV的一部分吗?也许只有几行?这也可以简单地用,它可以将文件读入数据帧并执行各种操作,例如查找最频繁的值df['item'].value_counts().idxmax()
。提供数据集的要点,可能会有人帮助您。谢谢您的回答。给约翰·科尔曼:我不确定我应该在哪个职能部门做这件事。你能给我一个提示吗?要不是机器人:只有一列名为逗号年逗号年。。。。与所附的截图完全相同。对pylang:我相信,没有任何其他库(?)有更简单的方法来实现它。你在github上吗?您可以发布数据集的一部分。给出一些数据,就可以证明使用pandas是多么容易。我认为您可以使用df2.values.tolist()
简单地使用非dataframe返回语句。这将是一个列表列表,而不是元组列表。很好的建议。谢谢@Paul H。我想您可以简单地使用df2.values.tolist()
返回非数据帧语句。这将是一个列表列表,而不是元组列表。很好的建议。谢谢@paulh。