学习笔记-Python-DataFrame常见操作总结

  1. DataFrame的创建

1.1. 从已有数据集创建

1.1.1. 从excel文件中读取

import numpy as np
import pandas as pd

df1 = pd.read_excel('./data/messi club data.xls', header = 0)
df2 = pd.read_excel('./data/messi national team data.xls', header = 0)
display(df1.head())
display(df2.head())

学习笔记-Python-DataFrame常见操作总结
如果第一行不是列名,而是数据元素,那么可以改成
df1 = pd.read_excel('./data/messi club data.xls', header = None)
df2 = pd.read_excel('./data/messi national team data.xls', header = None)
display(df1.head())
display(df2.head())

学习笔记-Python-DataFrame常见操作总结

1.1.2. 从csv文件中读取

import pandas as pd

df = pd.read_csv('./data/taiwan_dataset.csv', header=0)
df.head()

学习笔记-Python-DataFrame常见操作总结

1.2. 自己创建DataFrame

1.2.1. 基于字典dictionary创建

基于固定数据的方式创建:

data = {"age": [19, 17, 22, 27],
       "sex": ['male', 'female', 'male', 'male']}
df = pd.DataFrame(data)
df

学习笔记-Python-DataFrame常见操作总结
值得注意的是,当每一列只有一个数据时,仍然需要加 [ ],或者加”index=[0]”。
data = {"西甲总获胜场次": laliga_total_win_num,
        "西甲主场获胜场次": laliga_home_win_num,
        "西甲客场获胜场次": laliga_away_win_num,
        "西甲总进球场次": laliga_total_havegoals_num,
        "西甲主场进球场次": laliga_home_havegoals_num,
        "西甲客场进球场次": laliga_away_havegoals_num,
        "西甲主场进球数": laliga_home_goals,
        "西甲客场进球数": laliga_away_goals}
laliga_moredata = pd.DataFrame(data, index=[0])
laliga_moredata

学习笔记-Python-DataFrame常见操作总结
基于随机生成的方式创建:
import numpy as np

data = {"a": np.random.rand(3),
       "b": np.random.rand(3),
       "c": np.random.rand(3)}
df = pd.DataFrame(data)
df

学习笔记-Python-DataFrame常见操作总结

1.2.1. 基于数组array创建

基于固定数据的方式创建:

data = np.array([[1,2,3,4],
                [5,6,7,8],
                [9,10,11,12],
                [13,14,15,16]])
df = pd.DataFrame(data)
df

学习笔记-Python-DataFrame常见操作总结

基于随机生成的方式创建:

data = np.random.rand(12).reshape(4,3)
df = pd.DataFrame(data)
df

学习笔记-Python-DataFrame常见操作总结
  1. 查看DataFrame的基本信息

2.1. 查看行

import pandas as pd
import numpy as np

df = pd.read_csv("./data/California_housing_price.csv", header=0)
display(df.head())
display(df.head(8))
display(df.tail())
display(df.sample(8))

学习笔记-Python-DataFrame常见操作总结

2.2. 查看行数、列数和列名

df.shape
df.columns

2.3. 查看缺失值

df.info()

学习笔记-Python-DataFrame常见操作总结
这里可以看出,该dataframe的”total_bedrooms”一列有207个缺失值。
df[df.total_bedrooms.isnull()]

学习笔记-Python-DataFrame常见操作总结

2.4. 查看每列的数值信息

df.describe()

学习笔记-Python-DataFrame常见操作总结
如果还想查看其他百分位的数值信息的话,可以进行如下操作:
df.describe(percentiles=[0.2, 0.4, 0.75, 0.8])

学习笔记-Python-DataFrame常见操作总结
此外还可以只统计离散变量的信息:
df.describe(include='O')

学习笔记-Python-DataFrame常见操作总结

2.5. 查看离散变量的种类

df["ocean_proximity"].unique()

学习笔记-Python-DataFrame常见操作总结
  1. 选择DataFrame的数据

3.1. 基本选择操作

3.1.1. 行选择

连续选择:

df[2:5]

学习笔记-Python-DataFrame常见操作总结
间隔选择
df[2:10:2]

学习笔记-Python-DataFrame常见操作总结

3.1.2. 列选择

单列选择

df['longitude']
df.longitude

学习笔记-Python-DataFrame常见操作总结
多列选择:
df[['housing_median_age', 'population']]

学习笔记-Python-DataFrame常见操作总结

3.2. loc和iloc

3.2.1. loc

dataframe.loc是基于index和column名称进行切片的。

3.2.1.1. 行选择

连续选择:

df.loc[2:5]

学习笔记-Python-DataFrame常见操作总结
指定选择:
df.loc[[2,4,8]]

学习笔记-Python-DataFrame常见操作总结
间隔选择:
df.loc[2:6:2]

学习笔记-Python-DataFrame常见操作总结

3.2.1.2. 行和列同时选择

df.loc[2:6:2, "latitude":"total_bedrooms"]

学习笔记-Python-DataFrame常见操作总结
df.loc[2:6:2, "latitude":"total_bedrooms":2]

学习笔记-Python-DataFrame常见操作总结

3.2.2. iloc

iloc是基于index索引进行选择。

3.2.2.1. 行选择

df.iloc[2:5]

学习笔记-Python-DataFrame常见操作总结

3.2.2.2. 行和列同时选择

df.iloc[2:5, 4:9]

学习笔记-Python-DataFrame常见操作总结
df.iloc[:,2:9]

学习笔记-Python-DataFrame常见操作总结
df.iloc[2:5,:]

学习笔记-Python-DataFrame常见操作总结
df.iloc[2:8:2, 3:8:2]

学习笔记-Python-DataFrame常见操作总结
  1. 更改DataFrame的数据

4.1. 更改列名

df1 = pd.read_excel("./data/concrete_data.xls", header=0)
df1.head()

学习笔记-Python-DataFrame常见操作总结
我们可以看到这个数据集的列名比较乱,有许多空格和数学符号,因此需要处理一下。
df1.columns = ["cement", "blast_furnace", "fly_ash", "water", "superplasticizer",
              "coarse_aggregate", "fine_aggregate", "age", "concrete_compressive_strength"]
df1.head()

学习笔记-Python-DataFrame常见操作总结
df1.columns = [c.split('(')[0].replace(' ', '') for c in df1.columns]
df1.head()

学习笔记-Python-DataFrame常见操作总结

4.2. 更改索引

首先,自己创建一个dataframe。

from pandas import Series, DataFrame

df2 = DataFrame(np.arange(12).reshape(3, 4), index = ['aa', 'bb', 'cc'], columns=['a', 'b', 'c', 'd'])
df2

学习笔记-Python-DataFrame常见操作总结
有两种常用的方式来更改索引。
df2.index = Series(['Aa', '233', 'okk'])
df2

学习笔记-Python-DataFrame常见操作总结
df2.index = df2.index.map(str.upper)
df2

学习笔记-Python-DataFrame常见操作总结
当dataframe的索引是乱序的时候(常常出现在对dataframe进行切片和筛选后),我们可以使用reset_index重新顺序排列索引。
df3 = DataFrame(np.arange(20).reshape(5, 4), index=[4,2,1,0,3]columns=['a', 'b', 'c', 'd'])
df3

学习笔记-Python-DataFrame常见操作总结
df3 = df3.reset_index(drop=True)
df3

学习笔记-Python-DataFrame常见操作总结

4.3. 更改单一值

首先展示一下数据集。

学习笔记-Python-DataFrame常见操作总结

df.loc[1,"housing_median_age"] = 23
df.iloc[2,5] = 500
df.head()

学习笔记-Python-DataFrame常见操作总结

4.3. 更改多值

4.3.1. 更改一行中的某几个值

df.iloc[0:1, 6:10] = [200, 7.7777, 345678.0, "INLAND"]
df.head()

学习笔记-Python-DataFrame常见操作总结

4.3.2. 更改某几行的某几个值

更改第一行和第三行的第一列、第四列、第七列和最后一列。

df.iloc[0:4:2, 0::3] = [[-100, 900, 222, "ISLAND"], [-200, 1000, 233, "INLAND"]]
df.head()

学习笔记-Python-DataFrame常见操作总结
  1. 筛选DataFrame的数据

5.1. 单一条件筛选

df[df["median_income"]>6]

学习笔记-Python-DataFrame常见操作总结
df[df["ocean_proximity"] == "ISLAND"]

学习笔记-Python-DataFrame常见操作总结

5.2. 多条件筛选

df[(df["median_income"]>6)&(df["housing_median_age"]<30)]

学习笔记-Python-DataFrame常见操作总结

6.DataFrame的方法

6.1. df.to_datetime()

首先导入数据:

import numpy as np
import pandas as pd

df1 = pd.read_excel('./data/messi club data.xls', header = 0)
df2 = pd.read_excel('./data/messi national team data.xls', header = 0)
display(df1.head())
display(df2.head())

学习笔记-Python-DataFrame常见操作总结
然后修改一下列名,把中文变为英文。
df1 = df1.drop("Unnamed: 0", axis=1)
df2 = df2.drop("Unnamed: 0", axis=1)
df1.columns = ["date", "event", "home_team", "score", "guest_team", "line", "time", "goals", "assists", "card_num"]
df2.columns = ["date", "event", "home_team", "score", "guest_team", "line", "time", "goals", "assists", "card_num"]
display(df1.head())
display(df2.head())

学习笔记-Python-DataFrame常见操作总结
接下来,我们处理第一列的日期。这里有两种方法,一个是用自带的p d . t o _ d a t e t i m e ( ) pd.to_datetime()p d .t o _d a t e t i m e ()方法,另一种是自己定义一个函数。首先来看自带的方法。
df1['date'] = pd.to_datetime(df1['date'], format='%d-%m-%Y')
df2['date'] = pd.to_datetime(df2['date'], format='%d-%m-%Y')
df1['year'] = df1['date'].dt.year
df1['month'] = df1['date'].dt.month
df1['day'] = df1['date'].dt.day
df2['year'] = df2['date'].dt.year
df2['month'] = df2['date'].dt.month
df2['day'] = df2['date'].dt.day
display(df1.head())
display(df2.head())

学习笔记-Python-DataFrame常见操作总结
format后面跟的是现在dataframe里日期的模式,它会调整为”年-月-日”的形式。下面是自定义函数分割时间。
def DateSplit(df, col):
    year, month, day = [], [], []
    data = df.loc[:, col].values
    df = df.drop([col], axis=1)

    for i in range(data.shape[0]):
        year.append(int(data[i][6:]))
        month.append(int(data[i][3:5]))
        day.append(int(data[i][0:2]))
    date = pd.DataFrame({'year': year, 'month': month, 'day': day})
    result = pd.concat([date, df], axis=1)
    return result
df1 = DateSplit(df1, col="date")
df2 = DateSplit(df2, col="date")
display(df1.head())
display(df2.head())

学习笔记-Python-DataFrame常见操作总结

6.2. df.pivot_table()

比如,我想统计梅西俱乐部各项赛事的自然年数据,那么我就可以用pivot_table来进行处理。当然,到达这个目的,还可以用循环加内置判断的方式,但是代码会很长且运行速度不及内置的方法。

table = df1.pivot_table(values='goals', index=['event'], columns=['year'], aggfunc=np.sum, fill_value=0)
table

学习笔记-Python-DataFrame常见操作总结
待更新…

Original: https://blog.csdn.net/qq_41411175/article/details/112790931
Author: Maru
Title: 学习笔记-Python-DataFrame常见操作总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/739183/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球