Pandas

Pandas

**Pandas 是 Python 语言的一个扩展程序库,用于数据分析。**Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。

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

Pandas 数据结构 - Series

Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。Series 由索引(index)和列组成,函数如下:

# SeriesData定义,索引默认从0开始。
myvar = pd.Series([[1,2],[3,4]])
print(myvar)
...0    [1, 2] # 索引  元素
...1    [3, 4]
...dtype: object
# 用索引访问某元素,注意series是一维数组,不能视为一个矩阵myvar[0,0]是不对的
print(myvar[0])
...[1, 2]
# 指定索引,虽然此时仍可用myvar[0]访问元素,但是当指定的索引为整数1,2,3,没有0时就会报错
myvar = pd.Series(["Google", "Runoob", "Wiki"], index = ["x", "y", "z"])
...x    Google
...y    Runoob
...z      Wiki
...dtype: object
print(myvar['x'])
print(myvar[0])

Pandas 数据结构 - DataFrame

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

# dataFrame定义,行索引默认从0开始。data:二维数组,或一个平面矩阵。index:行索引。columns:列索引。
pandas.DataFrame( data, index, columns, dtype, copy)
# 输出所有列名
df.columns
# 形状
df.shape
# 利用list()
data = [['Google',10],['Runoob',12],['Wiki',13]]
df = pd.DataFrame(data,columns=['Site','Age'],dtype=float)
print(df)
...     Site   Age
...0  Google  10.0
...1  Runoob  12.0
...2    Wiki  13.0
# 利用索引访问
print(df['site'])
...0    Google
...1    Runoob
...2      Wiki
...Name: Site, dtype: object
# 使用 n维数组ndarrays 创建
data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}
df = pd.DataFrame(data)
print (df)
...     Site  Age
...0  Google   10
...1  Runoob   12
...2    Wiki   13
# 使用字典(key/value),其中字典的 key 为列名
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print (df)
...   a   b     c
...0  1   2   NaN
...1  5  10  20.0
# 使用 loc 属性返回指定行的数据.返回结果其实就是一个 Pandas Series 数据。
data = {"calories": [420, 380, 390], "duration": [50, 40, 45]}
df = pd.DataFrame(data)
print(df.loc[0])
...calories    420
...duration     50
...Name: 0, dtype: int64
# 返回第一行和第二行.返回结果其实就是一个 Pandas DataFrame 数据。
print(df.loc[[0,1]])
print(df.loc[0:1])
...   calories  duration
...0       420        50
...1       380        40
# loc定位某列
df.loc['duration']
# loc定位某一个元素
df.loc[0,'duration']
# 对所有值进行运算
df['duration']/10
# 对对应位置分别计算,维度需相同
df['calories']*df['duration']
# 新加一列计算前两列的积
df['mul'] = df['calories']*df['duration']
# 数学函数
df['duration'].max()
# sort默认从小到大。inplace=True时新生成一个表,指定ascending为False时为降序
df.sort_values('duration',inplace = True,ascending=False)

Pandas CSV 文件

CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

# 读取csv文件,read_csv返回 DataFrame 类型的数据
df = pd.read_csv('nba.csv')
# 用 to_csv() 方法将 DataFrame 存储为 csv 文件:
df = pd.DataFrame(dict)
df.to_csv('site.csv')
# head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行。
df.head()
# tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN。
df.tail()
# info() 方法返回表格的一些基本信息:
df.info()
# to_string()可打印全部信息到屏幕上
print(df.to_string())

Pandas JSON

JSON(JavaScript Object Notation,JavaScript 对象表示法),是存储和交换文本信息的语法,类似 XML。

# 读取json文件,返回 DataFrame 类型的数据,我们也可以直接处理 JSON 字符串。
df = pd.read_json('sites.json')
print(df.to_string())
...     id  likes    name             url
...0  A001     61    菜鸟教程  www.runoob.com
...1  A002    124  Google  www.google.com
...2  A003     45      淘宝  www.taobao.com
# JSON 对象与 Python 字典具有相同的格式,所以我们可以直接将 Python 字典转化为 DataFrame 数据:
s = {
    "col1":{"row1":1,"row2":2,"row3":3},
    "col2":{"row1":"x","row2":"y","row3":"z"}
}                    
df = pd.DataFrame(s)
print(df)
# 从 URL 中读取 JSON 数据:
URL = 'https://static.runoob.com/download/sites.json'
df = pd.read_json(URL)
print(df)
# 内嵌的 JSON 数据文件 nested_list.json 以及更加复杂的json文件:详见菜鸟教程

数据清洗

数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要对使数据分析更加准确,就需要对这些没有用的数据进行处理。在这个教程中,我们将利用 Pandas包来进行数据清洗。

# Pandas 清洗空值

# 删除包含空字段的行
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
# 通过 isnull() 判断各个单元格是否为空。返回bool型dataFrame
df.isnull()
# 用na_values变量指定空值
missing_values = ["n/a", "na", "--"]
df = pd.read_csv('property-data.csv', na_values = missing_values)
print (df['NUM_BEDROOMS'].isnull())
# fillna() 方法来替换一些空字段:
df.fillna(12345, inplace = True)
# Pandas使用 mean()、median() 和 mode() 方法计算列的均值(所有值加起来的平均值)、中位数值(排序后排在中间的数)和众数(出现频率最高的数)。
x = df["ST_NUM"].mean()
x = df["ST_NUM"].median()
x = df["ST_NUM"].mode()

# Pandas 清洗错误数据

# 修改数据
df.loc[2, 'age'] = 30

for x in df.index:
  if df.loc[x, "age"] > 120:
    df.loc[x, "age"] = 120
# 删除数据(x这一整行)
for x in df.index:
  if df.loc[x, "age"] > 120:
    df.drop(x, inplace = True)

# Pandas 清洗重复数据

# 比较两行,dtype: bool的dataFrame,若两行一样,则后面的行为true
df.duplicated()
# 删除重复行
df.drop_duplicates(inplace = True)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值