万字保姆级Pandas核心知识操作大全

举报
Python小二 发表于 2022/03/15 22:50:41 2022/03/15
【摘要】 👆点击关注|设为星标|干货速递👆 分享最近常用到pandas做数据处理和分析,特意总结了以下常用内容。 pandas常用速查 引入依赖 # 导入模块import pymysqlimport pandas as pdimport numpy as&nb...

👆点击关注|设为星标|干货速递👆

分享最近常用到pandas做数据处理和分析,特意总结了以下常用内容。

pandas常用速查

引入依赖


   
  1. # 导入模块
  2. import pymysql
  3. import pandas as pd
  4. import numpy as np
  5. import time
  6. # 数据库
  7. from sqlalchemy import create_engine
  8. # 可视化
  9. import matplotlib.pyplot as plt
  10. # 如果你的设备是配备Retina屏幕的mac,可以在jupyter notebook中,使用下面一行代码有效提高图像画质
  11. %config InlineBackend.figure_format = 'retina'
  12. # 解决 plt 中文显示的问题 mymac
  13. plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
  14. # 设置显示中文 需要先安装字体 aistudio
  15. plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
  16. plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
  17. import seaborn as sns
  18. # notebook渲染图片
  19. %matplotlib inline
  20. import pyecharts
  21. # 忽略版本问题
  22. import warnings
  23. warnings.filterwarnings("ignore")

   
  1. # 下载中文字体
  2. !wget https://mydueros.cdn.bcebos.com/font/simhei.ttf 
  3. # 将字体文件复制到 matplotlib'字体路径
  4. !cp simhei.ttf /opt/conda/envs/python35-paddle120-env/Lib/python3,7/site-packages/matplotib/mpl-data/fonts.
  5. # 一般只需要将字体文件复制到系统字体田录下即可,但是在 studio上该路径没有写权限,所以此方法不能用 
  6. # !cp simhei. ttf /usr/share/fonts/
  7. # 创建系统字体文件路径
  8. !mkdir .fonts
  9. # 复制文件到该路径
  10. !cp simhei.ttf .fonts/
  11. !rm -rf .cache/matplotlib

4e439db42021f970b839e166f7445ef6.png

算法相关依赖


   
  1. # 数据归一化
  2. from sklearn.preprocessing import MinMaxScaler
  3. # kmeans聚类
  4. from sklearn.cluster import KMeans
  5. # DBSCAN聚类
  6. from sklearn.cluster import DBSCAN
  7. # 线性回归算法
  8. from sklearn.linear_model import LinearRegression
  9. # 逻辑回归算法
  10. from sklearn.linear_model import LogisticRegression
  11. # 高斯贝叶斯
  12. from sklearn.naive_bayes import GaussianNB
  13. # 划分训练/测试集
  14. from sklearn.model_selection import train_test_split
  15. # 准确度报告
  16. from sklearn import metrics
  17. # 矩阵报告和均方误差
  18. from sklearn.metrics import classification_report, mean_squared_error

获取数据


   
  1. from sqlalchemy import create_engine
  2. engine = create_engine('mysql+pymysql://root:root@127.0.0.1:3306/ry?charset=utf8')
  3. # 查询插入后相关表名及行数
  4. result_query_sql = "use information_schema;"
  5. engine.execute(result_query_sql)
  6. result_query_sql = "SELECT table_name,table_rows FROM tables WHERE TABLE_NAME LIKE 'log%%' order by table_rows desc;"
  7. df_result = pd.read_sql(result_query_sql, engine)

3356bbc949cfc59c0dca0308a7cb2810.png

生成df


   
  1. # list转df
  2. df_result = pd.DataFrame(pred,columns=['pred'])
  3. df_result['actual'] = test_target
  4. df_result
  5. # df取子df
  6. df_new = df_old[['col1','col2']]
  7. # dict生成df
  8. df_test = pd.DataFrame({'A':[0.5872210.1356730.1356730.1356730.135673], 
  9.                         'B':['a''b''c''d''e'],
  10.                         'C':[12345]})
  11. # 指定列名
  12. data = pd.DataFrame(dataset.data, columns=dataset.feature_names)
  13. # 使用numpy生成20个指定分布(如标准正态分布)的数
  14. tem = np.random.normal(0120)
  15. df3 = pd.DataFrame(tem)
  16. # 生成一个和df长度相同的随机数dataframe
  17. df1 = pd.DataFrame(pd.Series(np.random.randint(110135)))

重命名列


   
  1. # 重命名列
  2. data_scaled = data_scaled.rename(columns={'本体油位''OILLV'})

增加列


   
  1. # df2df
  2. df_jj2yyb['r_time'] = pd.to_datetime(df_jj2yyb['cTime'])
  3. # 新增一列根据salary将数据分为3
  4. bins = [0,50002000050000]
  5. group_names = ['低''中''高']
  6. df['categories'] = pd.cut(df['salary'], bins, labels=group_names)

缺失值处理


   
  1. # 检查数据中是否含有任何缺失值
  2. df.isnull().values.any()
  3. # 查看每列数据缺失值情况
  4. df.isnull().sum()
  5. # 提取某列含有空值的行
  6. df[df['日期'].isnull()]
  7. # 输出每列缺失值具体行数
  8. for i in df.columns:
  9.     if df[i].count() != len(df):
  10.         row = df[i][df[i].isnull().values].index.tolist()
  11.         print('列名:"{}", 第{}行位置有缺失值'.format(i,row))
  12. # 众数填充
  13. heart_df['Thal'].fillna(heart_df['Thal'].mode(dropna=True)[0], inplace=True)
  14. # 连续值列的空值用平均值填充
  15. dfcolumns = heart_df_encoded.columns.values.tolist()
  16. for item in dfcolumns:
  17.     if heart_df_encoded[item].dtype == 'float':
  18.        heart_df_encoded[item].fillna(heart_df_encoded[item].median(), inplace=True)

独热编码

df_encoded = pd.get_dummies(df_data)
  

替换值


   
  1. # 按列值替换
  2. num_encode = {
  3.     'AHD': {'No':0"Yes":1},
  4. }
  5. heart_df.replace(num_encode,inplace=True)

删除列

df_jj2.drop(['coll_time''polar''conn_type''phase''id''Unnamed: 0'],axis=1,inplace=True)
  

groupby


   
  1. 0.从sklearn加载iris数据集
  2. from sklearn import datasets
  3. # 加载数据集和目标
  4. data, target = datasets.load_iris(return_X_y=True, as_frame=True)
  5. # 合并数据集和目标
  6. iris = pd.concat([data, target], axis=1, sort=False)
  7. iris
  8. # 创建groupby对象
  9. iris_gb = iris.groupby('target')
  10. 1. 创建频率表,输出每个类中数量多少
  11. iris_gb.size()
  12. 2. 计算常用的描述统计量
  13. # min、max()、medianhe、std等
  14. # 计算均值
  15. iris_gb.mean()
  16. # 单列
  17. iris_gb['sepal length (cm)'].mean()
  18. # 双列
  19. iris_gb[['sepal length (cm)''sepal width (cm)']].mean()
  20. 3. 查找最大值(最小值)索引
  21. iris_gb.idxmax()
  22. # 按sepal_length最大值这个条件进行了筛选
  23. sepal_largest = iris.loc[iris_gb['sepal length (cm)'].idxmax()]
  24. 4. Groupby之后重置索引
  25. iris_gb.max().reset_index()
  26. # ↑↓二者效果相同
  27. iris.groupby('target', as_index=False).max()
  28. 5. 多种统计量汇总,聚合函数agg
  29. iris_gb[['sepal length (cm)''sepal width (cm)']].agg(["min""mean"])
  30. 6.特定列的聚合
  31. # 为不同的列单独设置不同的统计量
  32. iris_gb.agg({"sepal length (cm)": ["min""max"], "sepal width (cm)": ["mean""std"]})
  33. 7. NamedAgg命名统计量
  34. # 把每个列下面的统计量和列名分别合并起来。可以使用NamedAgg来完成列的命名
  35. iris_gb.agg(
  36.      sepal_min=pd.NamedAgg(column="sepal length (cm)", aggfunc="min"),
  37.      sepal_max=pd.NamedAgg(column="sepal length (cm)", aggfunc="max"),
  38.      petal_mean=pd.NamedAgg(column="petal length (cm)", aggfunc="mean"),
  39.      petal_std=pd.NamedAgg(column="petal length (cm)", aggfunc="std")
  40.  )
  41. # 下述更简洁
  42. iris_gb.agg(
  43.     sepal_min=("sepal length (cm)""min"),
  44.     sepal_max=("sepal length (cm)""max"),
  45.     petal_mean=("petal length (cm)""mean"),
  46.     petal_std=("petal length (cm)""std")
  47. )
  48. 8. 使用自定义函数
  49. iris_gb.agg(pd.Series.mean)
  50. # 不仅如此,名称和功能对象也可一起使用。
  51. iris_gb.agg(["min", pd.Series.mean])
  52. # 我们还可以自定义函数,也都是可以的。
  53. def double_length(x):
  54.     return 2*x.mean()
  55. iris_gb.agg(double_length)
  56. # 如果想更简洁,也可以使用lambda函数。总之,用法非常灵活,可以自由组合搭配。
  57. iris_gb.agg(lambda x: x.mean())

透视表


   
  1. import numpy as np
  2. import pandas as pd
  3. import seaborn as sns
  4. titanic = sns.load_dataset('titanic')
  5. titanic.pivot_table(index='sex', columns='class')
  6. # 默认对所有列进行聚合,这时我们给与values参数,只计算想要的结果
  7. agg = pd.cut(titanic["age"],[0,18,80]) # 对年龄数据列进行分段,便于观看
  8. titanic.pivot_table(index=['sex','age'], columns='class',values=['survived','fare'])
  9. # 在实际使用中,并不一定每次都要均值,使用aggfunc指定累计函数
  10. titanic.pivot_table(index='sex', columns='class',aggfunc={'survived':sum, 'fare':'mean'})
  11. # 当需要计算每一组的总数时,可以通过margins 参数来设置:
  12. # margin 的标签可以通过margins_name 参数进行自定义,默认值是"All"
  13. titanic.pivot_table('survived', index='sex', columns='class', margins=True)

数据筛选


   
  1. # 取第33行数据
  2. df.iloc[32]
  3. # 某列以xxx字符串开头
  4. df_jj2 = df_512.loc[df_512["transformer"].str.startswith('JJ2')]
  5. df_jj2yya = df_jj2.loc[df_jj2["变压器编号"]=='JJ2YYA']
  6. # 提取第一列中不在第二列出现的数字
  7. df['col1'][~df['col1'].isin(df['col2'])]
  8. # 查找两列值相等的行号
  9. np.where(df.secondType == df.thirdType)
  10. # 包含字符串
  11. results = df['grammer'].str.contains("Python")
  12. # 提取列名
  13. df.columns
  14. # 查看某列唯一值(种类)
  15. df['education'].nunique()
  16. # 删除重复数据
  17. df.drop_duplicates(inplace=True)
  18. # 某列等于某值
  19. df[df.col_name==0.587221]
  20. # df.col_name==0.587221 各行判断结果返回值(True/False)
  21. # 查看某列唯一值及计数
  22. df_jj2["变压器编号"].value_counts()
  23. # 时间段筛选
  24. df_jj2yyb_0501_0701 = df_jj2yyb[(df_jj2yyb['r_time'] >=pd.to_datetime('20200501')) & (df_jj2yyb['r_time'] <= pd.to_datetime('20200701'))]
  25. # 数值筛选
  26. df[(df['popularity'] > 3) & (df['popularity'] < 7)]
  27. # 按数据类型选择列
  28. df = pd.DataFrame({'a': [12] * 3,
  29.                    'b': [True, False] * 3,
  30.                    'c': [1.02.0] * 3})
  31. print('df:', df)
  32. # 输出包含 bool 数据类型的列
  33. print('输出包含 bool 数据类型的列:', df.select_dtypes(include='bool'))
  34. # 输出包含小数数据类型的列
  35. print('输出包含小数数据类型的列:', df.select_dtypes(include=['float64']))
  36. # 输出排除整数的列
  37. print('输出包含小数数据类型的列:', df.select_dtypes(exclude=['int64']))
  38. # 某列字符串截取
  39. df['Time'].str[0:8]
  40. # 随机取num行
  41. ins_1 = df.sample(n=num)
  42. # 数据去重
  43. df.drop_duplicates(['grammer'])
  44. # 按某列排序(降序)
  45. df.sort_values("popularity",inplace=True, ascending=False)
  46. # 取某列最大值所在行
  47. df[df['popularity'] == df['popularity'].max()]
  48. # 取某列最大num行
  49. df.nlargest(num,'col_name')
  50. # 最大num列画横向柱形图
  51. df.nlargest(10).plot(kind='barh')

9188560f5f75b57f5499baa198ac2e07.png

差值计算


   
  1. # axis=0或index表示上下移动, periods表示移动的次数,为正时向下移,为负时向上移动。
  2. print(df.diff( periods=1, axis=‘index‘))
  3. print(df.diff( periods=-1, axis=0))
  4. # axis=1或columns表示左右移动,periods表示移动的次数,为正时向右移,为负时向左移动。
  5. print(df.diff( periods=1, axis=‘columns‘))
  6. print(df.diff( periods=-1, axis=1))
  7. # 变化率计算
  8. data['收盘价(元)'].pct_change()
  9. # 以5个数据作为一个数据滑动窗口,在这个5个数据上取均值
  10. df['收盘价(元)'].rolling(5).mean()

数据修改


   
  1. # 删除最后一行
  2. df = df.drop(labels=df.shape[0]-1)
  3. # 添加一行数据['Perl',6.6]
  4. row = {'grammer':'Perl','popularity':6.6}
  5. df = df.append(row,ignore_index=True)
  6. # 某列小数转百分数
  7. df.style.format({'data''{0:.2%}'.format})
  8. # 反转行
  9. df.iloc[::-1, :]
  10. # 以两列制作数据透视
  11. pd.pivot_table(df,values=["salary","score"],index="positionId")
  12. # 同时对两列进行计算
  13. df[["salary","score"]].agg([np.sum,np.mean,np.min])
  14. # 对不同列执行不同的计算
  15. df.agg({"salary":np.sum,"score":np.mean})

时间格式转换


   
  1. # 时间戳转时间字符串
  2. df_jj2['cTime'] =df_jj2['coll_time'].apply(lambda x: time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(x)))
  3. # 时间字符串转时间格式
  4. df_jj2yyb['r_time'] = pd.to_datetime(df_jj2yyb['cTime'])
  5. # 时间格式转时间戳
  6. dtime = pd.to_datetime(df_jj2yyb['r_time'])
  7. v = (dtime.values - np.datetime64('1970-01-01T08:00:00Z')) / np.timedelta64(1'ms')
  8. df_jj2yyb['timestamp'] = v

设置索引列

df_jj2yyb_small_noise = df_jj2yyb_small_noise.set_index('timestamp')
  

折线图


   
  1. fig, ax = plt.subplots()
  2. df.plot(legend=True, ax=ax)
  3. plt.legend(loc=1)
  4. plt.show()

b9feee1cad7e0d08ac1ca60b3e55169c.png


   
  1. plt.figure(figsize=(206))
  2. plt.plot(max_iter_list, accuracy, color='red', marker='o',
  3.          markersize=10)
  4. plt.title('Accuracy Vs max_iter Value')
  5. plt.xlabel('max_iter Value')
  6. plt.ylabel('Accuracy')

7695e4e3bdbf5dac82aa53d49f21045a.png

散点图


   
  1. plt.scatter(df[:, 0], df[:, 1], c="red", marker='o', label='lable0')   
  2. plt.xlabel('x')  
  3. plt.ylabel('y')  
  4. plt.legend(loc=2)  
  5. plt.show()

2de7e6100071bdd9414c538049ff3684.png

柱形图


   
  1. df = pd.Series(tree.feature_importances_, index=data.columns)
  2. # 取某列最大Num行画横向柱形图
  3. df.nlargest(10).plot(kind='barh')

3c9bf90400bf67f7129b46614379f3cd.png

热力图


   
  1. df_corr = combine.corr()
  2. plt.figure(figsize=(20,20))
  3. g=sns.heatmap(df_corr,annot=True,cmap="RdYlGn")

3cc507e15af9968241bad7d63c2c368d.png

66个最常用的pandas数据分析函数


   
  1. df #任何pandas DataFrame对象 
  2. s #任何pandas series对象

从各种不同的来源和格式导入数据


   
  1. pd.read_csv(filename) # 从CSV文件 
  2. pd.read_table(filename) # 从分隔的文本文件(例如CSV)中 
  3. pd.read_excel(filename) # 从Excel文件 
  4. pd.read_sql(query, connection_object) # 从SQL表/数据库中读取 
  5. pd.read_json(json_string) # 从JSON格式的字符串,URL或文件中读取。
  6. pd.read_html(url) # 解析html URL,字符串或文件,并将表提取到数据帧列表 
  7. pd.read_clipboard() # 获取剪贴板的内容并将其传递给 read_table() 
  8. pd.DataFrame(dict) # 从字典中,列名称的键,列表中的数据的值

导出数据


   
  1. df.to_csv(filename) # 写入CSV文件 
  2. df.to_excel(filename) # 写入Excel文件 
  3. df.to_sql(table_name, connection_object) # 写入SQL表 
  4. df.to_json(filename) # 以JSON格式写入文件

创建测试对象


   
  1. pd.DataFrame(np.random.rand(20,5))               # 520行随机浮点数 pd.Series(my_list)                               # 从一个可迭代的序列创建一个序列 my_list 
  2. df.index = pd.date_range('1900/1/30', periods=df.shape[0]) # 添加日期索引

查看、检查数据


   
  1. df.head(n)                       # DataFrame的前n行 
  2. df.tail(n)                       # DataFrame的最后n行 
  3. df.shape                         # 行数和列数 
  4. df.info()                        # 索引,数据类型和内存信息 
  5. df.describe()                    # 数值列的摘要统计信息 
  6. s.value_counts(dropna=False)     # 查看唯一值和计数 
  7. df.apply(pd.Series.value_counts) # 所有列的唯一值和计数

数据选取


   
  1. 使用这些命令选择数据的特定子集。
  2. df[col]               # 返回带有标签col的列 
  3. df[[col1, col2]]      # 返回列作为新的DataFrame 
  4. s.iloc[0]             # 按位置选择 
  5. s.loc['index_one']    # 按索引选择 
  6. df.iloc[0,:]          # 第一行 
  7. df.iloc[0,0]          # 第一栏的第一元素

数据清理


   
  1. df.columns = ['a','b','c']                  # 重命名列 
  2. pd.isnull()                                 # 空值检查,返回Boolean Arrray 
  3. pd.notnull()                                # 与pd.isnull() 相反 
  4. df.dropna()                                 # 删除所有包含空值的行 
  5. df.dropna(axis=1)                           # 删除所有包含空值的列 
  6. df.dropna(axis=1,thresh=n)                  # 删除所有具有少于n个非null值的行 
  7. df.fillna(x)                                # 将所有空值替换为x 
  8. s.fillna(s.mean())                          # 用均值替换所有空值(均值可以用统计模块中的几乎所有函数替换 ) 
  9. s.astype(float)                             # 将系列的数据类型转换为float 
  10. s.replace(1,'one')                          # 1 用 'one' 
  11. s.replace([1,3],['one','three'])            # 替换所有等于的值 替换为所有1 'one' ,并 3 用 'three' df.rename(columns=lambda x: x + 1)          # 列的重命名 
  12. df.rename(columns={'old_name''new_ name'})# 选择性重命名 
  13. df.set_index('column_one')                  # 更改索引 
  14. df.rename(index=lambda x: x + 1)            # 大规模重命名索引

筛选,排序和分组依据


   
  1. df[df[col] > 0.5]                      # 列 col 大于 0.5 df[(df[col] > 0.5) & (df[col] < 0.7)]  # 小于 0.7 大于0.5的行 
  2. df.sort_values(col1)                   # 按col1升序对值进行排序 
  3. df.sort_values(col2,ascending=False)   # 按col2 降序对值进行 排序 
  4. df.sort_values([col1,col2],ascending=[True,False]) #按 col1 升序排序,然后 col2 按降序排序 
  5. df.groupby(col)                        #从一个栏返回GROUPBY对象 
  6. df.groupby([col1,col2]) # 返回来自多个列的groupby对象 
  7. df.groupby(col1)[col2]                 # 返回中的值的平均值 col2,按中的值分组 col1 (平均值可以用统计模块中的几乎所有函数替换 ) 
  8. df.pivot_table(index=col1,values=[col2,col3],aggfunc=mean) # 创建一个数据透视表组通过 col1 ,并计算平均值的 col2 和 col3 
  9. df.groupby(col1).agg(np.mean)          # 在所有列中找到每个唯一col1 组的平均值 
  10. df.apply(np.mean)                      #np.mean() 在每列上应用该函数 
  11. df.apply(np.max,axis=1)                # np.max() 在每行上应用功能

数据合并


   
  1. df1.append(df2)                   # 将df2添加 df1的末尾 (各列应相同) 
  2. pd.concat([df1, df2],axis=1)      # 将 df1的列添加到df2的末尾 (行应相同) 
  3. df1.join(df2,on=col1,how='inner') # SQL样式将列 df1 与 df2 行所在的列col 具有相同值的列连接起来。'how'可以是一个 'left', 'right', 'outer', 'inner'

数据统计


   
  1. df.describe()    # 数值列的摘要统计信息 
  2. df.mean()        # 返回均值的所有列 
  3. df.corr()        # 返回DataFrame中各列之间的相关性 
  4. df.count()       # 返回非空值的每个数据帧列中的数字 
  5. df.max()         # 返回每列中的最高值 
  6. df.min()         # 返回每一列中的最小值 
  7. df.median()      # 返回每列的中位数 
  8. df.std()         # 返回每列的标准偏差

16个函数,用于数据清洗


   
  1. # 导入数据集
  2. import pandas as pd
  3. df ={'姓名':[' 黄同学','黄至尊','黄老邪 ','陈大美','孙尚香'],
  4.      '英文名':['Huang tong_xue','huang zhi_zun','Huang Lao_xie','Chen Da_mei','sun shang_xiang'],
  5.      '性别':['男','women','men','女','男'],
  6.      '身份证':['463895200003128433','429475199912122345','420934199110102311','431085200005230122','420953199509082345'],
  7.      '身高':['mid:175_good','low:165_bad','low:159_bad','high:180_verygood','low:172_bad'],
  8.      '家庭住址':['湖北广水','河南信阳','广西桂林','湖北孝感','广东广州'],
  9.      '电话号码':['13434813546','19748672895','16728613064','14561586431','19384683910'],
  10.      '收入':['1.1万','8.5千','0.9万','6.5千','2.0万']}
  11. df = pd.DataFrame(df)
  12. df

92581f83100aa94d8de7985d8b6bd4df.png

1.cat函数

用于字符串的拼接

df["姓名"].str.cat(df["家庭住址"],sep='-'*3)
  

17c4d39dfd6068abb730e1bb5270d378.png

2.contains

判断某个字符串是否包含给定字符

df["家庭住址"].str.contains("广")
  

514a629578b19529bc51c1dcb1178568.png

3.startswith/endswith

判断某个字符串是否以…开头/结尾


   
  1. # 第一个行的“ 黄伟”是以空格开头的
  2. df["姓名"].str.startswith("黄"
  3. df["英文名"].str.endswith("e")

4.count

计算给定字符在字符串中出现的次数

df["电话号码"].str.count("3")
  

9bc806ada2e5d5aba85f74e9fe460d01.png

5.get

获取指定位置的字符串


   
  1. df["姓名"].str.get(-1)
  2. df["身高"].str.split(":")df["身高"].str.split(":").str.get(0)

59a5890d9017ab7c8117c6ba1c1f8576.png

6.len

计算字符串长度

df["性别"].str.len()
  

5be3091b0340b636248629bad5a8815b.png

7.upper/lower

英文大小写转换


   
  1. df["英文名"].str.upper()
  2. df["英文名"].str.lower()

a447cddc97609e3dc0f3ad90122f6826.png

8.pad+side参数/center

在字符串的左边、右边或左右两边添加给定字符


   
  1. df["家庭住址"].str.pad(10,fillchar="*")      # 相当于ljust()
  2. df["家庭住址"].str.pad(10,side="right",fillchar="*")    # 相当于rjust()
  3. df["家庭住址"].str.center(10,fillchar="*")

adbdb80748b0c53f1017b1caf9db236a.png

9.repeat

重复字符串几次

df["性别"].str.repeat(3)
  

42f5e1f3d4e97d326fa28009e4138945.png

10.slice_replace

使用给定的字符串,替换指定的位置的字符

df["电话号码"].str.slice_replace(4,8,"*"*4)
  

3d46f8ec9861289d8f93978b0b496eed.png

11.replace

将指定位置的字符,替换为给定的字符串

df["身高"].str.replace(":","-")
  

64c8bbeaaf18d0b1ad29a63aa701ac0b.png

12.replace

将指定位置的字符,替换为给定的字符串(接受正则表达式)

  • replace中传入正则表达式,才叫好用;

  • 先不要管下面这个案例有没有用,你只需要知道,使用正则做数据清洗多好用;

df["收入"].str.replace("\d+\.\d+","正则")
  

0b07661047a16b39671aad590cafb768.png

13.split方法+expand参数

搭配join方法功能很强大


   
  1. # 普通用法
  2. df["身高"].str.split(":")
  3. # split方法,搭配expand参数
  4. df[["身高描述","final身高"]] = df["身高"].str.split(":",expand=True)
  5. df
  6. # split方法搭配join方法
  7. df["身高"].str.split(":").str.join("?"*5)

dcc6304a9f42f07a05dbf5bc66b6258b.png

14.strip/rstrip/lstrip

去除空白符、换行符


   
  1. df["姓名"].str.len()
  2. df["姓名"] = df["姓名"].str.strip()
  3. df["姓名"].str.len()

eb638af9420afc6f0326624f12c582cb.png

15.findall

利用正则表达式,去字符串中匹配,返回查找结果的列表

  • findall使用正则表达式,做数据清洗,真的很香!


   
  1. df["身高"]
  2. df["身高"].str.findall("[a-zA-Z]+")

069fb6257f6fdc967be8479189a08c6c.png

16.extract/extractall

接受正则表达式,抽取匹配的字符串(一定要加上括号)


   
  1. df["身高"].str.extract("([a-zA-Z]+)")
  2. # extractall提取得到复合索引
  3. df["身高"].str.extractall("([a-zA-Z]+)")
  4. # extract搭配expand参数
  5. df["身高"].str.extract("([a-zA-Z]+).*?([a-zA-Z]+)",expand=True)

6f76a8e60f15d3b656938d2c251ff175.png

来源:https://github.com/SeafyLiang/Python_study

推荐阅读  点击标题可跳转

文章来源: ityard.blog.csdn.net,作者:Python小二,版权归原作者所有,如需转载,请联系作者。

原文链接:ityard.blog.csdn.net/article/details/123437179

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。