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

Python 如何在数据框中添加条目?,python,pandas,dataframe,multivalue,Python,Pandas,Dataframe,Multivalue,基本上,我从csv文件中读取了我们的人口普查数据。 现在我必须编写一个函数,从csv文件中得到的表中以特定的方式查找县(不解释,因为这不是问题所在),并返回这些县 我的尝试: #idxl = list() #st = list() #cty = list() idx2 = 0 cty_reg = pd.DataFrame(columns = ('STNAME', 'CTYNAME')) for idx in range(census_df['CTYNAME'].count()): if(

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

我的尝试:

#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
   REGION  STNAME        CTYNAME
0       2  "Wisconsin"   "Washington County"
1       2  "Alabama"     "Washington County"
2       1  "Texas"       "Atauga County"
3       0  "California"  "Washington County"
  STNAME      CTYNAME
0 Wisconsin  Washington County
1 Alabama    Washington County
我所做的是用列的名称(函数必须返回)创建列表,然后使用if语句在for循环中应用特定条件来读取各自列表中所有必需列的条目。现在我创建了一个新的数据帧,我想将列表中的条目读入这个新的数据帧。我尝试了相同的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
   REGION  STNAME        CTYNAME
0       2  "Wisconsin"   "Washington County"
1       2  "Alabama"     "Washington County"
2       1  "Texas"       "Atauga County"
3       0  "California"  "Washington County"
  STNAME      CTYNAME
0 Wisconsin  Washington County
1 Alabama    Washington County
普查表图片:

#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
   REGION  STNAME        CTYNAME
0       2  "Wisconsin"   "Washington County"
1       2  "Alabama"     "Washington County"
2       1  "Texas"       "Atauga County"
3       0  "California"  "Washington County"
  STNAME      CTYNAME
0 Wisconsin  Washington County
1 Alabama    Washington County

示例表:

#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
   REGION  STNAME        CTYNAME
0       2  "Wisconsin"   "Washington County"
1       2  "Alabama"     "Washington County"
2       1  "Texas"       "Atauga County"
3       0  "California"  "Washington County"
  STNAME      CTYNAME
0 Wisconsin  Washington County
1 Alabama    Washington County
样本输出:

#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
   REGION  STNAME        CTYNAME
0       2  "Wisconsin"   "Washington County"
1       2  "Alabama"     "Washington County"
2       1  "Texas"       "Atauga County"
3       0  "California"  "Washington County"
  STNAME      CTYNAME
0 Wisconsin  Washington County
1 Alabama    Washington County

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

如果我正在正确阅读代码中的逻辑,您希望根据以下条件选择行:

  • 区域
    应为
    1
    2
  • POPESTIMATE2015
    POPESTIMATE2014
  • CTYNAME
    需要以
    华盛顿“
通常,Pandas可以轻松地根据条件选择行,而无需迭代数据帧:

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

如果我正在正确阅读代码中的逻辑,您希望根据以下条件选择行:

  • 区域
    应为
    1
    2
  • POPESTIMATE2015
    POPESTIMATE2014
  • CTYNAME
    需要以
    华盛顿“
通常,Pandas可以轻松地根据条件选择行,而无需迭代数据帧:

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

OP中发布的源DF中缺少一些列。但是,阅读循环我认为根本不需要循环。需要3个过滤器-用于
地区
PopestimateMet2015
CTYNAME
。如果我已经理解了OP中的逻辑,那么这在没有循环的情况下应该是可行的

备选案文1-原始答复

print df.loc[
            (df.REGION.isin([1,2])) & \
            (df.POPESTIMATE2015 > df.POPESTIMATE2014) & \
            (df.CTYNAME.str.startswith('Washington')), \
                          ['REGION', 'STNAME', 'CTYNAME']]
选项2-将
pd.eval一起使用

q = pd.eval("(df.REGION.isin([1,2])) and \
            (df.POPESTIMATE2015 > df.POPESTIMATE2014) and \
            (df.CTYNAME.str.startswith('Washington'))", \
            engine='python')
print df.loc[q, ['REGION', 'STNAME', 'CTYNAME']]
选项3-将
df.query一起使用

regions_list = [1,2]
dfq = df.query("(REGION==@regions_list) and \
              (POPESTIMATE2015 > POPESTIMATE2014) and \
              (CTYNAME.str.startswith('Washington'))", \
              engine='python')
print dfq[['REGION', 'STNAME', 'CTYNAME']]

OP中发布的源DF中缺少一些列。但是,阅读循环我认为根本不需要循环。需要3个过滤器-用于
地区
PopestimateMet2015
CTYNAME
。如果我已经理解了OP中的逻辑,那么这在没有循环的情况下应该是可行的

备选案文1-原始答复

print df.loc[
            (df.REGION.isin([1,2])) & \
            (df.POPESTIMATE2015 > df.POPESTIMATE2014) & \
            (df.CTYNAME.str.startswith('Washington')), \
                          ['REGION', 'STNAME', 'CTYNAME']]
选项2-将
pd.eval一起使用

q = pd.eval("(df.REGION.isin([1,2])) and \
            (df.POPESTIMATE2015 > df.POPESTIMATE2014) and \
            (df.CTYNAME.str.startswith('Washington'))", \
            engine='python')
print df.loc[q, ['REGION', 'STNAME', 'CTYNAME']]
选项3-将
df.query一起使用

regions_list = [1,2]
dfq = df.query("(REGION==@regions_list) and \
              (POPESTIMATE2015 > POPESTIMATE2014) and \
              (CTYNAME.str.startswith('Washington'))", \
              engine='python')
print dfq[['REGION', 'STNAME', 'CTYNAME']]

假设您正在选择满足条件的某种行,我们只需假设
select(row)
,如果选择,此函数将返回
True
,如果未选择,则返回
False
。我不会推断它是什么,因为你明确地说它不重要

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

下面是你要做的:

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

如果您编写了选择行的
select
函数,那么这是一个可以得到您想要的结果的线性函数。

假设您选择的是某种满足条件的行,我们只需说
select(row)
,如果选择了该函数,该函数将返回
True
,否则返回
False
。我不会推断它是什么,因为你明确地说它不重要

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

下面是你要做的:

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

如果您编写了选择行的
select
函数,那么这是一个可以得到您想要的结果的线性程序。

您能为您的输入和(所需)输出提供一个小样本数据框吗?这将使人们更容易回答您的问题。完成,添加了示例表和示例输出。太好了。我改进了格式,以便人们可以将其粘贴到代码中。现在,您可以清楚地了解选择这些行所使用的逻辑吗?您的输入中不需要填充列吗?没错,我的输出中只需要
STNAME
CTYNAME
列,您在回答中解释的逻辑是正确的,这就是我用来获得所需的
DataFrame
的。谢谢你的回答,因为它对我帮助很大。我基本上知道Pandas使这些条件句变得非常容易,但在编写代码时,我的注意力并没有集中在Pandas的易用性上。再次感谢。你们能阅读我对你们答案的评论并在那个里回复我吗?我需要输入中的人口列,但在样本中我并没有写,因为那个时它将是一个很长的表。顺便说一句,我已经解决了这个问题,谢谢。你能给我们一个小样本数据框,用于你的输入和(期望的)输出吗?这将使人们更容易回答您的问题。完成,添加了示例表和示例输出。太好了。我改进了格式,以便人们可以将其粘贴到代码中。现在,您可以清楚地了解选择这些行所使用的逻辑吗?您不需要输入中的填充列吗?没错,我只需要输出中的
STNAME
CTYNAME
列以及您解释的逻辑