Pandas DataFrame中实现取单个值的读取和修改
作者:凞懿
这篇文章主要介绍了Pandas DataFrame中实现取单个值的读取和修改,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
取DataFrame里面某个位置的值
知道index的时候:
# 这里用index做循环,去每一行某一列的值,直接用 df.loc[index][column name] 即可 for j in raw.index: chs_map = china_map[china_map['city_name']==raw.loc[j]['MAP_CITY']] sjz_map = china_map[china_map['prv_name']==raw.loc[j]['MAP_PRV']]
不知道index的时候
# 这里取某一行某一列的值,得用函数,要么出来的是一个列表而非对应位置的值 for j in raw['city'].unique() chs_map = china_map[china_map['city']==j]['MAP_CITY'].max() sjz_map = china_map[china_map['city']==j]['MAP_PRV'].max()
修改对应位置的值
知道index 和列名的时候
data2.loc[3,'hhd'] = 0
不知道index 根据条件修改的时候
# 多个条件, 与或非 找到对应的行, 后面要改的列,最后填值 HD.loc[(HD['STATUS']=='a'|(HD['STATUS']=='b'),'FLAG']=1
所有查询
df[row_start_index, row_end_index] 查对应行
df[0:] #第0行及之后的行,df的全部数据 df[:2] #第3行之前的数据不包含第三行 左开右闭 df[0:1] #第0行 df[1:3] #第2行到第3行(不含第4行) df[-1:] #最后一行 df[-3:-1] #倒数第3行和倒数第2行,因为没有-0,所以没有最后一行
df.loc[index,column] (使用索引值)
data2.loc['a','segments_name'] # 上面提到的直接取值 data2.loc['a',['segments_name','cnt_case_with_segment']] # 一行两列转置成个列表 data2.loc['a':'c',['segments_name','cnt_case_with_segment']] #选取第1行到第3行的数据, 这里面是全闭区间 这里生成dataframe data.loc[data['gender']=='m','name'] #选取gender列是m,name列的数据 data.loc[data['gender']=='M',['name','age']] #选取gender列是m,name和age列的数据
loc 修改
df.loc['a','name'] = 'aa' #修改index为‘a',column为‘name'的那一个值为aa。 df.loc['a'] = ['bb','ff',11] #修改index为‘s'的那一行的所有值。 df.loc['a',['name','age']] = ['bb',11] #修改index为‘a',column为‘name'的那一个值为bb,age列的值为11。
iloc[row_index, column_index] (使用索引位置)
data2.iloc[0,0] #第1行第1列的数据 data2.iloc[1,2] #第2行第3列的数据 data2.iloc[[1,3],0:2]#第2行和第4行,从第1列到第2列(左闭右开不包含第3列)的数据 data2.iloc[1:3,[1,2]] #第2行到第3行(不包含第1,4行),第2列和第3列的数据
iloc 修改
df.iloc[1,2] = 19 #修改一无素 df.iloc[:,2] = [11,22,33] #修改一整列 df.iloc[0,:] = ['lily','F',15] #修改一整行
.at .iat .ix
#at函数(使用索引值访问单个元素) df.at['a','A'] #iat函数(使用索引位置访问单个元素) df.iat[0,0] #ix函数(loc与iloc的混合) 切片索引+普通索引同时使用时候的交叉索引 df.ix[0:2,'A':'C']
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。