替换具体字段列中,值包含0的 替换成1, 比如值是 x101, 那么就会被替换成 x111
df['a'] = df['a'].str.replace('0', '1')
替换具体字段列中,值等于0的 替换成1, 比如值是 0, 那么就会被替换成 1, 如果值是 x101, 那么不会替换,因为需要完全匹配才替换
df['a'] = df['a'].replace('0', '1')
过滤某列中 值 存在一个列表中的行 , 比如下面的列子,可以取出a字段中,出现值为['aa','ab','ac']列表中的行数据
df1 = df[df['a'].isin(['aa', 'ab', 'ac'])]
过滤某列中值 等于,大于,小于等 获取数据,比如下面的列子, 可以取出a字段中大于等于666的数据,大于和小于用在数据类型上,等于可以用数字,字符串上都可以,下面是两种方法
df_filter = df[df["a"] >=666]
df_filter = df.loc[df.a >=666]
根据字段列排序,可多字段,多字段排序把‘a’改成['a','b'],与sql中order by功能相同, 下面举例是根据 a 字段降序,并替换原有的df, 注意排序的值类型必须统一
df.sort_values(by='a', ascending=False,inplace=True)
对列进行去重,第二个参数 keep 包含的值 有: first、last、False,
df.drop_duplicates(subset=['a'], keep='last', inplace=True)
df.drop_duplicates(keep='last', inplace=True) #第一个参数不写时,表示对所有列进行去重,保持每行是唯一的
删除具体列为nan的行,df1等于df中a列不为空的数据,既删除了a列中为nan的行
df1 = df[pd.notna(df['a'])]
填充值为nan的单元格
df1.fillna('value', inplace=True) #用指定值value填充,并替换原df
df1.fillna({'a':'aa', 'b':'bb'}, inplace=True) #用字典里对应指定值填充,并替换原df
df1.fillna(method='ffill', inplace=True) #用前一个非缺失值填充该缺失值,并替换原df
df1.fillna(method='bfill', inplace=True) #用后一个非缺失值填充该缺失值,并替换原df
过滤某列中 值 是否包含指定值,与mysql的like '%abc%'功能一样, 下面例子:过滤df的a字段中包含了'abc'的行
df = df[df['a'].str.contains('abc')]
统计dataframe里指定列所有值出现的次数, 比如取 a 列所有数据出现的次数
df['a'].value_counts() #此方法生产了一个series
df['a'].value_counts().to_dict() #此方法生产了一个字段,key是a列的值,value是值出现的次数
df1 = pd.DataFrame(list(df['a'].value_counts().to_dict().items()), columns=['a','a_count']) # 此方法在统计a列每个值出现的次数后再转换成dataframe, 其中df1的a列于df的a列是可以merge的, df1的c_count则是出现的次数
dataframe转换成列表嵌套字段,列表里的每一个元素为字典,代表每一行数据,每个字典是有多个key,value,key为字段名,value为具体数据
df1 = df.to_dict('records')