Python 如何在数据框中添加条目?
基本上,我从csv文件中读取了我们的人口普查数据。 现在我必须编写一个函数,从csv文件中得到的表中以特定的方式查找县(不解释,因为这不是问题所在),并返回这些县 我的尝试: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(
#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
华盛顿“
df = census_df[
((df.REGION == 1) | (df.REGION == 2)) & \
(df.POPESTIMATE2015 > POPESTIMATE2014) & \
(df.CTYNAME.str.startswith('Washington'))
]
如果我正在正确阅读代码中的逻辑,您希望根据以下条件选择行:
应为区域
或1
2
POPESTIMATE2015
POPESTIMATE2014
需要以CTYNAME
华盛顿“
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
列以及您解释的逻辑