pandas笔记(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37431083/article/details/87458675

为什么要学习pandas

numpy能处理数值,但是不能处理其他形式,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他形式的数据。

pandas之Series

Series 一维,带标签数组

import pandas as pd
import string

t = pd.Series([1, 23, 54, 75, 31, 5])

t1 = pd.Series([1, 34, 55, 3, 23, 1], index=list(string.ascii_uppercase[5:11]))
print(t1)

# 通过字典创建
t2 = {"name": "xiaomin", "age": 18, "tel": "2344442"}
t2 = pd.Series(t2)
print(t2)

# 取建,取值
print(t2.index)
print(t2.values)

切片索引与numpy类似

pandas读取外部数据

参考 pandas 对数据的读取和存储(学习笔记)

import pandas as pd

#pandas读取csv中的文件
df = pd.read_csv("./dogNames2.csv")

print(df[(800<df["Count_AnimalName"])|(df["Count_AnimalName"]<1000)])

读取mongo数据

# coding=utf-8
from pymongo import MongoClient
import pandas as pd


client = MongoClient()
collection = client["douban"]["tv1"]
data = collection.find()
# data = list(collection.find())
# t1 = data[0]
# t1 = pd.Series(t1)
# print(t1)
data_list = []
for i in data:
    temp = {}
    temp["info"]= i["info"]
    temp["rating_count"] = i["rating"]["count"]
    temp["rating_value"] = i["rating"]["value"]
    temp["title"] = i["title"]
    temp["country"] = i["tv_category"]
    temp["directors"] = i["directors"]
    temp["actors"] = i['actors']
    data_list.append(temp)


df = pd.DataFrame(data_list)
# print(df)

#显示头几行
print(df.head(1))
# print("*"*100)
# print(df.tail(2))

#展示df的概览
# print(df.info())
# print(df.describe())
print(df["info"].str.split("/").tolist())

pandas之DataFrame

DataFrame对象既有行索引,又有列索引
行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1

通过pd.DataFrame构建DataFrame对象

通过 ndarray构建DataFrame对象

arr_obj = np.random.rand(3, 4)
print(arr_obj)

[[ 0.63142018 0.40399522 0.44070245 0.58114319]
[ 0.82655924 0.5716437 0.20031657 0.20645792]
[ 0.42643845 0.65572268 0.11973222 0.95861301]]

df_obj = pd.DataFrame(arr_obj)
print(df_obj)
print(df_obj.head(2))
# 输出
          0         1         2         3
0  0.631420  0.403995  0.440702  0.581143
1  0.826559  0.571644  0.200317  0.206458
2  0.426438  0.655723  0.119732  0.958613
          0         1         2         3
0  0.631420  0.403995  0.440702  0.581143
1  0.826559  0.571644  0.200317  0.206458

通过 dict 构建DataFrame对象

dic = {
    "A" : 1,
    "B" : pd.Timestamp("20170426"),
    "C" : pd.Series(range(10, 14), dtype = "float64"),
    "D" : ["Python", "Java", "C++", "C"],
    "E" : np.array([3] * 4, dtype="int32"),
    "F" : "ITCast"
}
df_obj2 = pd.DataFrame(dic)
print(df_obj2)
# 输出
   A          B     C       D  E       F
0  1 2017-04-26  10.0  Python  3  ITCast
1  1 2017-04-26  11.0    Java  3  ITCast
2  1 2017-04-26  12.0     C++  3  ITCast
3  1 2017-04-26  13.0       C  3  ITCast

# 在DataFrame对象里找到指定的元素,先找列,再找行
print(df_obj2['D'][2])
print(df_obj2.D[2])
# 输出
# C++
# C++

# 新增加一列的数据,数据可以是和DataFrame对象的其他列运算后的数据
df_obj2["G"] = df_obj2["C"] + 10
print(df_obj2)

# 输出
   A          B     C       D  E       F     G
0  1 2017-04-26  10.0  Python  3  ITCast  20.0
1  1 2017-04-26  11.0    Java  3  ITCast  21.0
2  1 2017-04-26  12.0     C++  3  ITCast  22.0
3  1 2017-04-26  13.0       C  3  ITCast  23.0

# 通过del方法,指定删除一列的数据
del(df_obj2['E'])
print(df_obj2)
# 输出
   A          B     C       D       F     G
0  1 2017-04-26  10.0  Python  ITCast  20.0
1  1 2017-04-26  11.0    Java  ITCast  21.0
2  1 2017-04-26  12.0     C++  ITCast  22.0
3  1 2017-04-26  13.0       C  ITCast  23.0

DataFrame的基础属性和整体情况查询

import pandas as pd

df = pd.read_csv(r"C:\Users\zouyo\Desktop\dogNames2.csv")

# 查看信息
print(df.head())
print(df.info())

# dataFrame的排序方法,ascending=false表示降序
df = df.sort_values(by="Count_AnimalName", ascending=False)
# 取前10行  tail()取后几行
print(df.head(10))

# pandas取行取列的注意点
# 方括号写数组,表示取行,对行进行操作
# 写字符串,表示的取列索引,对列进行操作
print(df[:20])  # 取前20个
print(df["Row_Labels"], df[:20]["Row_Labels"])  # 取Row_Labels这一列,和Row_Labels这一列的前20个
print(type(df["Row_Labels"]))  # <class 'pandas.core.series.Series'>

DataFrame的索引 loc和iloc

  1. df.loc 通过标签索引行数据
  2. df.iloc 通过位置获取行数据
  • loc
  • iloc
  • 赋值

pandas之布尔索引

例题:有一组数据,分别是狗的名字,和狗名字的使用次数,现在假如我们想找到所有的使用次数超过800小于1000的狗的名字,应该怎么选择?

df = pd.read_csv(r"C:\Users\zouyo\Desktop\dogNames2.csv")
print(df[(800 < df["Count_AnimalName"]) & (1000 > df["Count_AnimalName"])])
# 输出
# [16220 rows x 2 columns]
#       Row_Labels  Count_AnimalName
# 2660     CHARLIE               856
# 3251        COCO               852
# 12368      ROCKY               823

pandas之字符串方法

缺失数据(nan)的处理

对于NaN的数据,在numpy中我们处理起来比较复杂。
在pandas中我们处理起来非常容易

判断数据是否为NaN:pd.isnull(df),pd.notnull(df)

处理方式1:删除NaN所在的行列dropna (axis=0, how=‘any’, inplace=False)
处理方式2:填充数据,t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)

处理为0的数据:t[t==0]=np.nan
当然并不是每次为0的数据都需要处理
计算平均值等情况,nan是不参与计算的,但是0会参与,所以当不想0参与计算,可以把0替换成nan

t1.fillna(t1.mean())
t1[“age”] = t1[“age”].fillna(t1[“age”].mean()) # 对某一列的nan值进行替换

猜你喜欢

转载自blog.csdn.net/qq_37431083/article/details/87458675