1. drop columns
df.drop(columns=['Founder', 'Locations'])
2. 两列复制到一起
df['aaa'] = df['aa'] +'-'+ df['a']
3. 筛选
df[(df.A==100)&(df.B=='a')]
4. row_number
df['sort_num']=df.groupby('id')['dt'].rank().astype(int)
5. pivot table count
pd.pivot_table(df, values='col1', index='col2', columns='col3', aggfunc='count')
6.生成分布图:
df.hist(bins=100, figsize=(20,15),color='#3aa6dd')
7.分位数:
np.quantile(df['xxx'], 0.25)
8.不要科学记数法
np.set_printoptions(suppress=True)
pd.set_option('display.float_format', lambda x: '%.2f' % x) #为了直观的显示数字,不采用科学计数法
9. 大规模筛选 ,isin
https://codeantenna.com/a/LrPDQVhiL5
10.选取特定列
df = df.loc[:, ['A', 'C']]
df = df.iloc[:, [0, 2]]
11. python表格显示所有的值
#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)
12.rename
df.rename({'a':'X','b':'Y'}, axis=1)
13.to_csv中文
df_final.to_csv('df_final.csv',encoding='utf_8_sig')
df.to_excel(filename, index=False, encoding='utf-8')
14. group_by
df.groupby(by=["b"]).sum()
df.groupby(by=["b"]).count().sort_values(ascending=False)
15. 行转列,列转行
https://blog.csdn.net/qq_41780234/article/details/121622495
16. 提取字符串里面的数字
a = pd.read_csv('train_list.txt', sep = ' ', dtype={'id':str, 'lable':int})
a['id']=pd.to_numeric(a['id'].str.extract(r'(\d+)'))
17. left join
merge = tmd.merge(tmp, on=['topic_id','day'], how='left')
18. case when
np.select(condition_list, choice_list, default=0)
# 条件列表、执行操作列表、缺失值
df['c'] = np.select([(df['a'].isnull()) & (df['b'] == 0),
(df['a'].isnull()) & (df['b'] == 1),
(df['a'] == 2) & (df['b'] == 0)],
['one', 'two', 'three'],
default = 'XXX')
19. eval遍历
for i in range(len(df['column'])):
df['column'][i] = eval(df['column'][i])
20. 取list里含有特定字符的前面的字符
for i in range(len(df['Column'])):
df['top1'][i] = min([item.split(':top_1', 1)[0] for item in df['Column'][i]], key=len)
if i%100==0: #进度条
print(i,"/",len(df['c']))
21.string to int
df['DataFrame Column'] = df['DataFrame Column'].astype(int)
22. replace
df['Column'].replace(0, 'null')
23. 文本相似度 & 提取中文
import itertools
import numpy as np
import re
import Levenshtein
def find_chinese(str):
pattern = re.compile(r'[^\u4e00-\u9fa5]')
chinese = re.sub(pattern, '', str)
return chinese
def text_fuc(lt):
lt = [find_chinese(i) for i in lt]
lt = list(itertools.combinations(lt,2))
if len(lt) ==0:
return 0
result = 0
for i in lt:
result += Levenshtein.jaro_winkler(i[0],i[1])
result = result/len(lt)
del lt
return result
df['simi_score'] = [text_fuc(eval(i)) for i in df['text_list']]
24. 解读OLS结果
25. percentile 表格化
describe(percentiles=[0.75,0.9,0.95]) 【针对想要75以上的分位数的情况】
groupby 后的分位数:
df.groupby(by = 'A').B.describe(percentiles=[0.75,0.9,0.95])
26. read_csv, 不同column用不同的格式
df=pd.read_csv('查询.csv',dtype = 'float64', converters = {'ct_id': str, 'bk_id': str})
27. 计算字数
df['len'] = df['aa'].apply(lambda x: len(x))
28.去掉列名里重复的字符串
df = df.rename(columns=lambda x: x.replace('↓', ''))
29.计算唯一值的个数
len(df[''].unique())
30. outer merge
df3=pd.merge(dfboy,dfgirl, on='id', how='outer')
31. 如果大于1,就赋值1
df['column_name'] = df['column_name'].apply(lambda x: 1 if x > 1 else x)
32.cat.codes
场景:连续变量做了 pd.qcut(df['yy'], 50,duplicates='drop')之后,会转化成一个一个区间,区间怎么转化成类别呢?
答案:x_data.yy = x_data.yy.cat.codes
就能把区间变成顺序的类别了~
33.array横向转纵向
场景:做完aa = preprocessing.normalize([x_data.yy]) 之后,想把这个放回dataframe,但是没办法,因为这个转化出来是横向array
答案:b = np.reshape(aa, (1,np.product(aa.shape)))[0]
就可以从横向转纵向了~
34. string转list
try:
book_id_list_x = ast.literal_eval(book_id_list_x)
except (SyntaxError, ValueError):
book_id_list_x = []
这段代码是使用 ast.literal_eval() 函数尝试将字符串形式的列表解析为实际的列表对象。
ast.literal_eval() 是 Python 中的一个内置函数,用于评估字符串中的表达式,并返回结果。它可以安全地将字符串解析为 Python 字面值,例如列表、字典、元组等。
在这段代码中,我们使用 ast.literal_eval() 函数来尝试将 book_id_list_x 的值解析为列表对象。如果解析成功,则将解析后的列表赋值给对应的变量 book_id_list_x。如果解析失败(出现语法错误或无效的值),则将对应的变量赋值为空列表 []。
通过这个过程,我们可以将字符串形式的列表转换为实际的列表对象,以便后续的处理和判断。