Python—17.1、pandas库

参考链接:https://www.runoob.com/pandas/pandas-tutorial.html

1、来源简介

Pandas 名字衍生自术语 “panel data”(面板数据)和 “Python data analysis”(Python 数据分析)。
Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。
Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。

2、数据结构

Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据);

2.1、Series 结构

一种类似于一维数组的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。

  • 语法说明
pandas.Series( data, index, dtype, name, copy)

代码实践

  • 常规使用
import pandas as pd

samp_list = ["9VSS", "4BNN", "7QWW"]
v_series = pd.Series(samp_list)
print(v_series)

print(v_series[2])  # 按照索引查找元素

说明:index不显示指定,默认从 0 开始;

  • 指定 index创建
import pandas as pd

samp_list = ["9VSS", "4BNN", "7QWW"]
v_series_b = pd.Series(samp_list,index=range(1,len(samp_list)+1))
print(v_series_b)

说明:此处 index 会 从 1 开始;

  • key-value格式
import pandas as pd

samp_list = ["9VSS", "4BNN", "7QWW"]
samp_dict = dict(zip(range(1,len(samp_list)+1),samp_list))
v_series_d = pd.Series(samp_dict)
print(v_series_d)

说明:此处 key 值会 转为 Series 的 index 值;

  • 按照 index拆分
import pandas as pd

samp_list = ["9VSS", "4BNN", "7QWW"]
samp_dict = dict(zip(range(1,len(samp_list)+1),samp_list))
v_series_e = pd.Series(samp_dict,index=[2,3])
print(v_series_e)

说明:此处结果会展示 index 值为 2 和 3 的值;

2.2、DataFrame 结构

一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。

  • 语法说明
pandas.DataFrame( data, index, columns, dtype, copy)

说明:columns列为显示指定,默认为 range(0,1,2,...n)

代码实践

  • ndarrays 结构
# coding=utf-8
import pandas as pd

samp_data ={
    "BH":["A","B","C"],
    "SBH":["9VSS","4BNN","7QWW"]
}
v_form=pd.DataFrame(samp_data)
print(v_form)

  • key-value 字典
# coding=utf-8
import pandas as pd

samp_data = [{"BH":"A","SBH": "9VSS"}, {"BH":"B", "SBH":"4BNN"}, {"BH":"C","SBH":"7QWW","ZCZE":"990010"}]

v_form = pd.DataFrame(samp_data, index=range(1,4), columns=["BH","SBH","ZCZE"])
print(v_form)

输出结果

  BH   SBH    ZCZE
1  A  9VSS     NaN
2  B  4BNN     NaN
3  C  7QWW  990010

说明:此处没有对应值的位置,使用 NaN 占位;

  • 复合元素 list
# coding=utf-8
import pandas as pd

samp_data = [["A", "9VSS"], ["B", "4BNN"], ["C","7QWW"]]

v_form = pd.DataFrame(samp_data, index=range(1,4), columns=["BH","SBH"])
print(v_form)
  • loc[index]返回指定行
# coding=utf-8
import pandas as pd

samp_data = [["A", "9VSS"], ["B", "4BNN"], ["C","7QWW"]]

v_form = pd.DataFrame(samp_data, index=range(1,4), columns=["BH","SBH"])
print(v_form.loc[2])

结果输出

BH         B
SBH     4BNN
ZCZE     NaN
Name: 2, dtype: object

说明:返回一行使用 loc[rowindex],返回多行 loc[[index_1,index_2,...index_n]]

  • df[column_name]输出某列
# coding=utf-8
import pandas as pd

samp_data = [["A", "9VSS"], ["B", "4BNN"], ["C","7QWW"]]

v_form = pd.DataFrame(samp_data, index=range(1,4), columns=["BH","SBH"])
print(v_form["SBH"])

说明:输出多列格式为 df.[[column_1,column_2,...column_n]]

  • 指定单行单列
df[column_name].loc[row_index]

df.loc[row_index,column_name]
  • 指定单行多列
df_data.loc[row_index,[column_1,column_2,...column_n]]

df_data[[column_1,column_2,...column_n]].loc[row_index]
  • 指定多行单列
df_data[column_name].loc[[row_index_1,row_index_2,...row_index_n]]

df_data.loc[[row_index_1,row_index_2,...row_index_n],"column_name"]
  • 指定多行多列
df_data[[column_1,column_2,...column_n]].loc[[row_index_1,row_index_2,...row_index_n]]

df_data.loc[[row_index_1,row_index_2,...row_index_n],[column_1,column_2,...column_n]]

3、pandas使用

  • 版本查看
import pandas as pd
print(pd.__version__)

3.1、关键函数

  • v_df.head(n)
    说明:读取 dataframe 对象的前 n 行,参数 n 不填默认返回前 5 行,空值使用 NaN占位;

  • v_df.tail(n)
    说明:读取 dataframe 对象的 后 n 行, 参数 n 不填默认返回 尾 5 行,空值使用NaN占位;

  • v_df.info()
    说明:显示数据的信息,包括列名、数据类型、缺失值等;

  • v_df.describe()
    说明:显示数据的基本统计信息,包括均值、方差、最大值、最小值等;

  • v_df.shape
    说明:显示数据的行数和列数。

3.2、df 对象操作

CSV(Comma-Separated Values,即逗号分隔值或字符分隔值),其文件以纯文本形式存储表格数据(数字和文本)。

3.2.1、 CSV操作

1)读取 csv

  • pd.read_csv()
# coding=utf-8
import pandas as pd

df_csv = pd.read_csv("nba_data.csv", encoding="utf-8")
print(df_csv)
print(df_csv.loc[[x for x in range(10, 21)]].to_string())

说明:此处不进行 to_string(),则读取的 csv 文件只展现数据的前5行和最后5行,中间以 ...标识;

2)转换 CSV

  • df.to_csv()
import pandas as pd

samp_data = [{"BH":"A","SBH": "9VSS"}, {"BH":"B", "SBH":"4BNN"}, {"BH":"C","SBH":"7QWW","ZCZE":"990010"}]

v_form = pd.DataFrame(samp_data, index=range(1,4), columns=["BH","SBH","ZCZE"])
print(v_form)
v_form.to_csv("samp_data.csv",encoding="utf-8")

说明:dataframe 对象转换为 csv文件;

3.2.2、excel操作

  • df.read_excel(excel_file)

3.2.3、Json操作

  • df.read_json(json_string)
    说明:从 JSON 字符串中读取数据;

3.2.3、html操作

  • df.read_html(url)
    说明:从 HTML 页面中读取数据。

3.3、数据清洗

3.3.1、空值判断

  • 常规判断

说明:使用 df.isnull()判断单元格数据是否为空值;

  • 定义规则
import pandas as pd

missing_values = ["Na","na","N/A","n/a","--",""]
df_csv = pd.read_csv("nba_data.csv", encoding="utf-8",na_values=missing_values)
print(df_csv.loc[[40,41,42,43]].isnull().to_string())

结果输出

    Unnamed: 0   Name   Team  Number  Position    Age  Height  Weight  College  Salary
40       False  False  False   False     False  False   False   False     True   False
41       False  False  False   False     False  False   False   False     True   False
42       False  False  False   False     False  False   False   False    False   False
43       False  False  False   False     False  False   False   False     True   False

Process finished with exit code 0

说明:在 pd.read_csv中 指定 参数 na_values参数,自定义空值规则;

3.3.2、空值删除

  • 语法说明
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

参数说明:
1)axis:默认为 0,表示遇空值剔除整行;如果设置参数 axis=1 表示遇空值去掉整列;
2)how:默认为 ‘any’ 如果一行/列 里任何一个数据为空 就剔除整行/列;如果设置 how=‘all’ 则表示 一行/列 里数据都是 空值才剔除该行/列;
3)thresh:设置需要多少非空值的数据该行/列才可以保留下来;
4)subset:设置想要检查的列,如果是多个列使用列名的 list 作为参数;
5)inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据;

备注:此处 df.dropna()或者 df.fillna()函数处理的只是 dataframe 对象,如果 dataframe对象由读取 csv 文件而来,经过操作后 csv 文件内容并未改变;

  • 判断指定列
df.dropna(subset=[column_1,column_2])
  • 替换空值
df.fillna(default_value, inplace = True)

3.3.3、格式转换

  • 规范日期
import pandas as pd

samp_data = {
  "Date": ['2020/12/01', '2020/12/02' , '20201226'],
  "age": [50, 200, 12345]
}

df_data = pd.DataFrame(samp_data)
print(df_data)
df_data["Date"] = pd.to_datetime(df_data["Date"])
print(df_data)

输出结果

         Date    age
0  2020/12/01     50
1  2020/12/02    200
2    20201226  12345
        Date    age
0 2020-12-01     50
1 2020-12-02    200
2 2020-12-26  12345

Process finished with exit code 0

说明:使用 pd.to_datetime(df)规范日期格式;

3.3.4、数据清洗

  • 数据处理
df.drop(row_index,inplace=True)

说明:删除冲突行;

df_data.duplicated()

说明:判断每行的值是否重复;

df_data.drop_duplicates(inplace=True)

说明:删除重复行,返回值为 None

3.4、数据遍历

df_data = pd.DataFrame(samp_data)
for x in df_data.index:
  print(df_data.loc[x])

====================================== over ======================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值