如何在Pandas数据框中添加条目?

2024-09-27 21:32:47 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上我有我们的人口普查数据,我从一个csv文件中读到了熊猫。 现在我要写一个函数,从csv文件中得到的表中,以一种特定的方式查找县(不解释这一点,因为这不是问题所在),然后返回这些县。在

我的尝试:

我所做的是用列的名称创建列表(函数必须返回这些列),然后在for循环中应用特定条件,使用if语句读取它们各自列表中所有必需列的条目。现在我创建了一个新的数据帧,我想把列表中的条目读入这个新的数据帧中。我尝试了同样的for循环来完成它,但都是徒劳的,尝试从这些列表中生成序列,并尝试将它们作为数据帧中的参数传递,仍然是徒劳的,从这些列表中生成数据帧,并尝试使用append()函数来连接它们,但仍然是徒劳的。任何帮助都将不胜感激。在

代码:

#idxl = list()
#st = list()
#cty = list()
idx2 = 0
cty_reg = pd.DataFrame(columns = ('STNAME', 'CTYNAME'))
for idx in range(census_df['CTYNAME'].count()):
    if((census_df.iloc[idx]['REGION'] == 1 or census_df.iloc[idx]['REGION'] == 2) and (census_df.iloc[idx]['POPESTIMATE2015'] > census_df.iloc[idx]['POPESTIMATE2014']) and census_df.loc[idx]['CTYNAME'].startswith('Washington')):
    #idxl.append(census_df.index[idx])
    #st.append(census_df.iloc[idx]['STNAME'])
    #cty.append(census_df.iloc[idx]['CTYNAME'])
    cty_reg.index[idx2] = census_df.index[idx]
    cty_reg.iloc[idxl2]['STNAME'] = census_df.iloc[idx]['STNAME']
    cty_reg.iloc[idxl2]['CTYNAME'] = census_df.iloc[idx]['CTYNAME']
    idx2 = idx2 + 1
cty_reg

人口普查表图片:

enter image description here

示例表:

^{pr2}$

样本输出:

  STNAME      CTYNAME
0 Wisconsin  Washington County
1 Alabama    Washington County

我很抱歉对美国的州和县了解较少,我只是随机地把州名和县放在样本表中,只是想告诉你我想从中得到什么。谢谢你的帮助。在


Tags: 数据函数df列表forregcensusappend
3条回答

假设您选择的是某种满足条件的行,假设select(row),如果被选中,这个函数返回True,否则返回{}。我不能推断它是什么,因为你特别说它不重要

然后你想要那一行的STNAME和CTYNAME。在

所以你可以这样做:

your_new_df = census_df[census_df.apply(select, axis=1)]\
.apply(lambda x: x[['STNAME', 'CTYNAME']], axis=1)

如果您编写了select函数来选择行,那么这是一个将得到您想要的结果的行。在

如果我正确地阅读了您代码中的逻辑,您需要根据以下条件选择行:

  • REGION应该是1或{}
  • POPESTIMATE2015>;POPESTIMATE2014
  • CTYNAME需要以"Washington"开头

一般来说,Pandas可以方便地根据条件选择行,而不必迭代数据帧:

df = census_df[
        ((df.REGION == 1) | (df.REGION == 2)) & \
        (df.POPESTIMATE2015 > POPESTIMATE2014) & \
        (df.CTYNAME.str.startswith('Washington'))
    ]

在操作中发布的源数据框中有一些列丢失。但是,读取循环我认为根本不需要循环。需要3个筛选器-REGIONPOPESTIMATE2015CTYNAME。如果我已经理解了操作中的逻辑,那么在没有循环的情况下这应该是可行的

选项1-原始答案

print df.loc[
            (df.REGION.isin([1,2])) & \
            (df.POPESTIMATE2015 > df.POPESTIMATE2014) & \
            (df.CTYNAME.str.startswith('Washington')), \
                          ['REGION', 'STNAME', 'CTYNAME']]

选项2-使用andpd.eval

^{pr2}$

选项3-使用anddf.query

^{3}$

相关问题 更多 >

    热门问题