数据分析之读取数据

Pandas读取JSON文件函数

函数用法返回值
read_jsonpd.read_json(文件路径)由读取的JSON文件数据生成的DataFrame

Pandas读取CSV文件函数

函数用法返回值
read_csvpd.read_csv(文件路径)由读取的CSV文件数据生成的DataFrame

read_csv函数的一些其他参数:

参数赋值作用
headerNone不以CSV文件数据的第一行为所生成DataFrame的列名
index_col列名以CSV文件数据的指定列为标签索引

DataFrame的一些配置

实际上是通过给set_option函数传参数来配置。

配置作用
pd.set_option(“display.max_columns”, 数量)设置DataFrame展示列数的上限
pd.set_option(“display.max_colwidth”, 数量)设置DataFrame每列中元素包含字符的上限

数据分析之评估清洗数据

就像刚买来的菜可能会有些脏需要先清洗再做饭。刚刚读取到的数据可能也是脏乱的数据,所以也需要先清洗一下,这样才能确保数据分析得到干净的分析结果。

而清洗前评估能使我们更有效和准确的对数据进行清洗。那么如何评估数据呢?

评估数据

评估数据的时候主要看两个方面:结构和内容。

依据结构,数据可分为:

  • 乱数据:结构方面需要清理的数据
  • 整洁数据:结构方面不需要清理的数据

整洁数据需要具有以下三大特点:

  1. 每列是一个变量
  2. 每行是一个观察值
  3. 每个单元格是一个值

可以通过DataFrame的info、head、tail、sample等方法来评估。

依据内容,数据可分为:

  • 脏数据:内容方面需要清理的数据
  • 干净数据:内容方面不需要清理的数据

脏数据包括:

  1. 丢失数据,值为NaN
  2. 重复数据
  3. 不一致数据,如”一班”和”1班”虽然意思相同,但是不利于代码进行分析
  4. 无效和错误数据,即无关数据或过度夸张的数据等。

不过有时候可以允许数据为NaN或者重复,具体问题具体分析。

对于脏数据评估可以使用的一些方法:

脏数据类型方法
丢失数据DataFrame的info、isnull和sum的组合等
重复数据DataFrame的duplicate等方法
不一致数据Series的value_counts等方法
无效和错误数据Series的sort_values、DataFrame的describe等

清洗数据

对于数据结构清洗的一些解决思路:

乱数据结构方法
列包含多个变量拆分列为多列,看情况可能还要重塑
行包含多条信息拆分行为多行,看情况可能还要重塑
每列是观察值行列转置

对于数据内容清洗的一些解决思路:

脏数据类型方法
丢失数据1.人工填入缺失
2.不处理缺失值
3.把有缺失值的行删除
4.用平均值等填充代替缺失值
重复数据删除
不一致数据进行统一
无效和错误数据删除或替换

其他注意点:

  • 手机号不应该参与运算,所以应该为字符串类型
  • 对于只有“是”和“否”两个值的列,用“True”和“False”代替更好

DataFrame改变索引和列名的方法

方法用法返回值是否改变原值
renameDataFrame.rename(index={旧索引1:索引1, 旧索引2:索引2, …})
DataFrame.rename(columns={旧列名1:列名1, 旧列名2:列名2, …})
修改索引后的新DataFrame
修改列名后的新DataFrame
rename
DataFrame.rename(index=某函数/方法)
DataFrame.rename(columns=某函数/方法)
索引经过函数或方法转换后的新DataFrame
列名经过函数或方法转换后的新DataFrame
set_indexDataFrame.set_index(列名)指定列变成索引的新DataFrame
reset_indexDataFrame.reset_index(列名)索引变为初始位置索引的新DataFrame
sort_indexDataFrame.sort_index()
DataFrame.sort_index(axis=1)
对索引排序后的新DataFrame
对列名排序后的新DataFrame

补充:如果方法有可选参数inplace,则指定其为True则会使该方法改变DataFrame原值。

DataFrame对列进行拆分

使用Series的str属性中的split方法,例子如下:

df[["人口", "密度"]] = df["人口密度"].str.split("/", expand=True)

表示以”/”为间隔符拆分列名,expand=True表示分成单独的Series。当然”人口密度”列还需要用drop方法删除掉,这里就不写了。

DataFrame对列进行合并

使用Series的str属性中的cat方法,例子如下:

df = df["姓"].str.cat(df["名"])

表示将”姓”和”名”两列合并。不过还有个可选参数sep,可以用来指定两列值用什么分隔符,如:

df = df["姓"].str.cat(df["名"], sep="-")

DataFrame把列名转换为变量值

函数用法返回值是否改变原值
meltpd.melt(df, id_vars=[列名1, 列名2, …], var_name=新列名1,value_name=新列名2)除了指定列名,其他列名都转换为新列1的值,对应值都转换为新列2的值的DataFrame

DataFrame把行进行拆分

方法用法返回值是否改变原值
explodeDataFrame.explode(行名)行被拆分的新DataFrame

DataFrame对整列缺失值进行填充

DataFrame[列名] = 填充值

DataFrame对某个缺失值进行填充

DataFrame.loc[标签索引, 列名] = 填充值
DataFrame.iloc[位置索引, 位置列名] = 填充值

DataFrame对部分缺失值进行填充

DataFrame.loc[标签索引1:标签索引2, 列名] = 填充值
#还有诸如此类使用切片来筛选出部分DataFrame来填充值的形式。

DataFrame和Serise自动找到缺失值进行填充

方法用法返回值是否改变原值
fillnaDataFrame.fillna(填充值)填充完所有缺失值的新DataFrame
fillnaSeries.fillna(填充值)填充完所有缺失值的新Series

DataFrame删除存在缺失值的行

方法用法返回值是否改变原值
dropnaDataFrame.dropna()删去所有存在缺失值的行的新DataFrame
dropnaDataFrame.dropna(subset=[列名1, 列名2,…])删除指定列名中存在缺失值的行的新DataFrame

若指定axis参数的值为1,则是删除存在缺失值的列。

DataFrame和Serise删除重复数据

方法用法返回值是否改变原值
drop_duplicatesDataFrame.drop_duplicates()删除重复的行的新DataFrame
drop_duplicatesSeries.drop_duplicates()删除重复元素的新Series

对于DataFrame的drop_duplicates若传入参数keep为’last’,则保留所有重复值的最后一行

同理对于DataFrame的drop_duplicates也可以传入subset参数来指定作为判断是否有重复值的列/行。

DataFrame和Series对值进行替换

方法用法返回值是否改变原值
replaceDataFrame.replace(原始值,替换值)
DataFrame.replace(原始值列表,替换值)
DataFrame.replace(替换字典)
值替换后的新DataFrame
replaceSeries.replace(原始值,替换值)
Series.replace(原始值列表,替换值)
Series.replace(替换字典)
值替换后的新Series

Series对值的类型进行转换

方法用法返回值是否改变原值
astypeSeries.astype(新类型)所有元素转换成新类型的新Series

tip:在Pandas里面字符串是object类型

Pandas将Series元素类型转换为datetime的函数

函数用法返回值是否改变原值
to_datetimepandas.to_datetime(Series)所有元素转换成datetime的新Series

Pandas的分类数据和数值数据

Pandas有一个数据类型叫category,该数据类型的数据为分类数据,也就是包含有限数量的不同类别的数据,我的理解是相当于c语言的枚举类型。

数值数据是某个具体的数值,对其做数学运算是有意义的。

tip:使用Series的astype方法将类型转换为category时要对category加引号,因为这不是python的原生类型

数据分析之保存数据

Pandas写入csv文件函数

函数用法返回值
to_csvDataframe.to_csv(文件路径)None

to_csv函数的一些参数:

参数赋值作用
indexFalse不将索引写入文件

By Liu

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注