《Python数据分析》之数据清洗& Json处理

488 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天


  • DA24 去掉信息不全的用户

image.png

本题考察dropna()函数的用法; 参考代码如下:

import pandas as pd

Nowcoder = pd.read_csv('Nowcoder.csv', sep=',', dtype=object)
pd.set_option('display.width', 300)  # 设置字符显示宽度
pd.set_option('display.max_rows', None)  # 设置显示最大行
pd.set_option('display.max_columns', None)


print(Nowcoder.dropna())

dropna()用法:

DataFrme.dropna(axis=0,how=’any’,thresh=None,subset=None,inplace=False)
参数:
axis: 默认axis=0。0为按行删除,1为按列删除
how: 默认 ‘any’。 ‘any’指带缺失值的所有行/列; 'all’指清除一整行/列都是缺失值的行/列
thresh: int,保留含有int个非nan值的行
subset: 删除特定列中包含缺失值的行或列
inplace: 默认False,即筛选后的数据存为副本,True表示直接在原数据上更改


  • DA25 修补缺失的用户数据

image.png

import pandas as pd

Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
pd.set_option('display.width', 300)  # 设置字符显示宽度
pd.set_option('display.max_rows', None)  # 设置显示最大行
pd.set_option('display.max_columns', None)

Nowcoder['Graduate_year'] = Nowcoder['Graduate_year'].fillna(Nowcoder['Graduate_year'].max())
Nowcoder['Language'] = Nowcoder['Language'].fillna('Python')
Nowcoder['Achievement_value'] = Nowcoder['Achievement_value'].fillna(int(Nowcoder['Achievement_value'].mean()))
print(Nowcoder)

参考其他学习代码:

import pandas as pd

Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
pd.set_option('display.width', 300)  # 设置字符显示宽度
pd.set_option('display.max_rows', None)  # 设置显示最大行
pd.set_option('display.max_columns', None)
max_year = Nowcoder['Graduate_year'].max()
Nowcoder['Graduate_year'].fillna(value=2022,inplace=True)
Nowcoder['Language'].fillna(value='Python',inplace=True)
mean_value = round(Nowcoder['Achievement_value'].mean(),0)
Nowcoder['Achievement_value'].fillna(value=mean_value,inplace=True)
print(Nowcoder)
  • DA26 解决牛客网用户重复的数据

image.png

参考代码如下:

import pandas as pd

Nowcoder = pd.read_csv('Nowcoder.csv', sep=',', dtype=object)
pd.set_option('display.width', 1000)
pd.set_option('display.max_rows', None)


print(Nowcoder.duplicated())  #输出每一行是否有重复
print(Nowcoder.drop_duplocates()) # 输出去重后的文件的全部数据

参数
subset: 列标签
keep: {‘first’, ‘last’, False}, 默认值 ‘first’
first: 保留第一次出现的重复项。
last: 删除重复项,仅保留最后一次出现的重复项 False: 删除所有重复项
inplace:布尔值,默认为False,是否删除重复项或返回副本

  • DA27 统一最后刷题日期的格式

image.png

参考格式如下:

import pandas as pd

Nowcoder = pd.read_csv('Nowcoder.csv', sep=',', dtype=object)
pd.set_option('display.width', 1000)
pd.set_option('display.max_rows', None)

Nowcoder.Last_submission_time = pd.to_datetime(Nowcoder.Last_submission_time,format='%Y-%m-%d')
print(Nowcoder[['Nowcoder_ID','Level','Last_submission_time']])

另一种代码如下: Nowcoder['Last_submission_time']=Nowcoder.Last_submission_time.apply(lambda x : pd.Timestamp(x))


Json处理

  • DA28 将用户的json文件转换为表格形式

image.png

import pandas as pd
import json

pd.set_option('display.width', 300)  # 设置字符显示宽度
pd.set_option('display.max_rows', None)  # 设置显示最大行
pd.set_option('display.max_columns', None)
with open('Nowcoder.json', 'r') as f:
    data = json.loads(f.read())
    print(pd.DataFrame(data))