A B C D
5 A0 B0 C0 D0
6 A1 B1 C1 D1
7 A2 B2 C2 D2
8 A3 B3 C3 D3
1,直接中括号[]选取
df['A'] 选择第A列,是一个series,选择多列不能df['A','B'],必须用loc
df['A'][5] 选择第A列,索引为5的,即A0
df['A'].iloc[0] = df['A'].values[0] 选择第A列第1行,即A0
df[0:3] 选择前2行,即索引为5和6的行
df['6':'8'] 选择索引为6,7,8的行
2,loc获取,通过index或者columns名称选取
df.loc['5'] 索引为5的行 即A0 B0 C0 D0
df.loc[:,['A','B']] 选择A和B列
df.loc['5',['A','B']] 索引为5,列号为A和B的数据,可以赋列表
df.loc['5','A'] 访问index为5,columns为A的单元格
df.at['5','A'] 同loc速度快点
往df里逐行添加内容时,可以用df.loc[index_name] = [list]
例如:逐行爬取豆瓣电影数据:df.loc[str(len(df)+1)] = [list],这种方法需要事先确定要columns
3,iloc获取,通过行号或者列号选取
df.iloc[1] 第1行,索引为5的行 即A0 B0 C0 D0
df.iloc[0:2,0:2] 第1,2行,第1,2列
df.iloc[1,1] 访问1行1列的单元格
df.iat[1,1] 同iloc速度快点
df.iloc[0:-1, 3] 第3列所有数据
4,获取索引名
df.iloc[1].name 获取到第2行的索引名,即6
可以是index = df[df['A'] == 5].index # 此时返回的是Int64Index,用此index取数据会取到sereis
可以是index = df[df['A'] == 5].index.tolist() # 此时返回的是list,加个[0]后可以取到第一个元素的int
5,选择一批行
list=[6,7]
df.loc[list] 获取索引为6和7的行
6,重新根据index选择数据
result.reindex(index=list)
新增列:
方法一:.iloc:
1)iloc遍历赋值:如果已经有'A'列,可以用df['A'].iloc[5] = '77' , 即A列的第6行的值=77
2)iloc遍历赋值没有'A'列时:如果没有'A'列,上述赋值会出错,可以先添加个'A'列,即df['A'] = np.nan,再df['A'].iloc[5] = '77'
方法二:.loc
1).loc遍历赋值:如果是df.loc[5, 'A'] = 77, 即索引为5,列名为A的,赋值=77,则不管有没有'A'列都能成功,不存在的index和column会自动创建
2).loc一次性赋值:可以应用布尔series赋给同一个值,例如df.loc[series, 'A'] = 'yes',即series中是True的,列名为'A'的,就会被赋值为yes
3).loc一次性赋值:整列赋一个列表,table1_sub.loc[:,'A'] = list ,直接给A列赋一个列表
方法三:insert
df.insert(0, 'A', listA),注意list需要与df长度一致
方法四:直接加
1)直接加一列:df['A'] = None,默认是加在最后一列, 如果想加在第一列,可以df.insert(0, 'A', ['']*len(df))
2)直接加多列:df = pd.concat([df, pd.DataFrame(columns=list('DE'))]),列的次序无法指定,并且fillna时会对整个df做出调整
3)直接加多列:df = df.reindex(columns=list('ABCDE'), fill_value=0),列的次序按照list指定,并且fill_value只对新增列做出调整,推荐!
新增行:
.loc:
1)整行赋一个列表:df.loc[index_name] = [list]
遍历一个dataframe,又有多个series,需要用到.loc赋值时,可以使用:
for index, element in enumerate(zip(df['a'], df['b'])):
df.loc[index, 'A'] = xxx
遍历一个dataframe,可以直接使用index配合loc,遍历所有列项:
for index in df.index:
df.loc[index, 'A'] ……..