- 索引和列操作
- 函数
- 缺失值
索引和列操作
# 1 加载数据 # 1.1 从链家租房数据集中获取天通苑租房区域的所有数据存储在df2中 # 1.2 从df2中获取价格列存储在df2_price对象import pandas as pd df = pd.read_csv('/root/pandas_code_ling/data/b_LJdata.csv') df2 = df[df['区域']== '天通苑租房'] df2_price = df2['价格'] df2_price
# 2 获取索引 # 2.1 通过 df2.index和 s_price.index 可以查看数据的索引 # 2.2 使用索引下标df2.index[0]和s.index[0]可以获取具体的某一个索引值df2_price.index df2.index df2.index[2] print(df2_price.index[2]) # 78 第三个
# 3 查看列名 # 3.1 查看 DataFrame 中所有列名 df.columns # Index(['区域', '地址', '户型', '面积', '价格', '朝向', '更新时间', '看房人数'], dtype='object') # 3.2 查看 DataFrame 中 特定列名对应的下标 df.columns.get_loc('价格') # 4# 目标: 读取数据时指定索引列 # 1 读取数据 使用 区域列 作为索引df_3 = pd.read_csv('/root/pandas_code_ling/data/b_LJdata.csv',index_col=0) df_3
# 目标: 指定某列为索引 # 1 使用 set_index 指定 区域 列为索引列, 影响原始数据df_4 = df.set_index('区域',inplace=False) df
# 目标: 重置索引 # 0 准备数据 copy_df = df2.copy() # print(copy_df.head()) # 重置索引 影响原始数据, 去掉 index 列 copy_df.reset_index(drop=True, inplace=True) copy_df# 0 拷贝s_price的前5条数据 new_price = df2_price.head().copy() print(new_price) # 1 重置索引 new_price = new_price.reset_index(inplace=False, drop=True) print(new_price) # 2 修改索引 new_price.index=['a','b','c','d','e'] print(new_price)# 目标: 赋值修改列名new_df = df[['区域','价格']] new_df = new_df.head().copy() new_df new_df.columns = ['列名1','列名2'] new_df# 目标: 赋值修改列名和索引 # 1 使用 rename 修改列名 # 2 使用 rename 修改索引new_df.rename( columns={'区域':'新区域','价格':'新价格'}, index={0:'a', 2:'b', 4:'c'}, inplace=True ) new_df
函数
原始数据
# 根据指定列的值由大到小排列,返回n行数据 df2.nlargest(5,'价格')
df2.nsmallest(3,'价格')
# 按价格列的数值由大到小进行排序 不修改原始数据 print(df2.sort_values(['价格'], ascending=False))
# 先对看房人数列由小到大排序, 再对价格列由大到小排序 print(df2.sort_values(['价格', '看房人数'], ascending=[True, False]))相关性
df.corr()标准偏差
df2.std()分位数
# 二分位数 中位数 df2.quantile()# 四分位数 (计算:以看房人数四分之一分位为例 (10-1)*0.25=2.25 2.25+1=3.25 第三位是29 29+(30-29)*0.25=29.25) df2.quantile([0.25, 0.5, 0.75])
缺失值
-
Pandas中的NaN值来自NumPy库,NumPy中缺失值有几种表示形式:NaN,NAN,nan,他们都一样
-
缺失值和其它类型的数据不同,它毫无意义,NaN不等于0,也不等于空字符串
加载数据 df = pd.read_csv('/root/pandas_code_ling/data/c_city_day.csv') df.head()df = pd.read_csv('/root/pandas_code_ling/data/c_city_day.csv',keep_default_na=False) df.head()
df = pd.read_csv('/root/pandas_code_ling/data/c_city_day.csv',na_values='Ahmedabad') df.head()df.info()# df.head().isna() # df.head().isnull() # df.head().notnull() df.head().notna()df = pd.read_csv('/root/pandas_code_ling/data/c_city_day.csv') # 随机获取10条数据 df2 = df.sample(n=10, random_state=5) df2# 删除含有缺失值的行数据 df2.dropna() # # 删除含有缺失值的列 df2.dropna(axis=1)# # 删除指定列中含有缺失值的行数据 df2.dropna(how='any', subset=['PM2.5', 'Xylene', 'AQI'])# # 删除指定列中都含有缺失值的行数据 df2.dropna(how='all', subset=['PM2.5', 'Xylene', 'AQI'])# # 删除含有缺失值的行数据, 剩余非空值个数大于等于12的行数据保留 df2.dropna(thresh=12)df.head().isnull().sum()填充缺失值
# 目标: 用平均值填充PM2.5的缺失值 # 1 加载数据 df = pd.read_csv("./data/c_city_day.csv") # 2 验证缺失值 df.info() # 总: 29531 PM2.5: 24933# 3 求平均值 pm25_mean = df['PM2.5'].mean() print(pm25_mean) # 67.45057794890272 # 4 填充平均值 df['PM2.5'].fillna(pm25_mean, inplace=True)# 5 验证 df.info() # 总: 29531 PM2.5: 29531 print(df['PM2.5'].mean())# 使用前后值填充# 加载数据 df = pd.read_csv('./data/c_city_day.csv') s1 = df['Xylene'][54:64] print(s1) print('---------------------------') print(s1.fillna(method='ffill'))# 加载数据 df = pd.read_csv('./data/c_city_day.csv') s1 = df['Xylene'][54:64] print(s1) print('---------------------------') print(s1.fillna(method='bfill'))# 使用线性填充df = pd.read_csv('./data/c_city_day.csv') s1 = df['Xylene'][54:64] print(s1) print('---------------------------') print(s1.interpolate(limit_direction='both'))