Pandas入门

Task1  数据加载

数据载入

在Python环境下安装pandas和numpy这两个库 

!pip install pandas

!pip install numpy

导入numpy和pandas

import pandas as pd

import numpy as np

载入数据

相对路径和绝对路径

1.相对路径:指文件相对于当前工作目录所在的位置

   /代表根目录      ./代表当前所在的目录      ../代表上一层目录   

   获取相对路径:

2.绝对路径:总是从根文件夹开始

①Window系统中以盘符(C: 、D:)作为根文件夹

②OS X或者Linux系统中以 / 作为根文件夹 

   获取绝对路径:

①在windows上可以通过Ctrl+Shift+C获取文件的绝对路径 

② 

import os
path1 = os.path.abspath('.') # 获取当前所处的文件夹的绝对路径
path2 = os.path.abspath('..') # 获取当前所处的文件夹上一级文件夹的绝对路径

(1) 使用相对路径载入数据

      df = pd.read_csv('train.csv') #csv文件

(2) 使用绝对路径载入数据

      df = pd.read_csv(r'C:\Users\lenovo\Desktop\Pandas\train.csv')

每1000行为一个数据模块,逐块读取

在pandas中,逐块读取通常是通过read_csv函数实现的,该函数提供了chunksize参数,用于指定每次迭代时读取的行数。

当设置了chunksize参数后,read_csv函数返回的不再是一个完整的DataFrame,而是一个可迭代的对象 。

逐块读取后,如果需要将所有块合并回一个完整的DataFrame,可以使用pd.concat函数。

chunker = pd.read_csv('./your_data.csv',chunksize=1000)

将表头改成中文,索引改为乘客ID

将表头改成中文

方法一:

# 假设你有一个名为data的DataFrame
data.columns = ['中文名称 1', '中文名称 2', '中文名称 3', ...]

1.确保数据文件的编码是UTF-8,这样可以正确处理中文字符。
2.使用read_csv函数读取数据时,可以通过header参数指定使用哪一行作为表头。如果数据文件中第一行已经是中文表头,则设置header=0。 

方法二:

使用rename参数:读取数据后,使用rename方法将列名从英文改为中文。可以使用传递一个字典给rename的方法,字典的键是原列名,值是新的中文列名。 

df = pd.read_csv('your_data.csv')
new_columns = {'Original English Name 1':'中文名称 1','Original English Name 2':'中文名称 2','Original English Name 3':'中文名称 3',...}
df = df.rename(columns=new_columns)

方法三:

使用names参数:在使用read_csv函数读取数据时,可以通过names参数直接指定一个数组作为新的列名,这些列名将成为DataFrame的表头。

import pandas as pd
df = pd.read_csv('your_data.csv', header=None, names=['中文名称 1', '中文名称 2', '中文名称 3', ...])
索引乘客ID

pd.read_csv()参数及其功能:
index_col:指定哪一列或列的编号作为行索引。如果设置为 None,则使用文件中的行号作为索引。 

df = pd.read_csv('your_data.csv',index_col='乘客ID')

初步观察

查看数据的基本信息

1.查看DataFrame的形状:使用shape属性可以获得DataFrame的行数和列数。

df.shape 

2.查看DataFrame的数据类型:使用dtypes属性可以查看DataFrame中每列的数据类型。

df.dtypes

3.查看DataFrame的非空计数:使用info方法可以查看DataFrame中非空值的计数以及每列的数据类型和内存使用情况。

df.info()

4.查看DataFrame的汇总统计信息:使用describe方法可以获得数值型列的汇总统计信息(计数、平均值、标准差、最小值、四分位数和最大值)

df.describe()

 5.查看DataFrame的前几行或后几行数据:使用head和tail方法可以分别查看DataFrame的前几行和后几行数据

df.head(n) # 默认显示前5行
df.tail(n) # 默认显示最后5行

判断数据是否为空,为空的地方返回True,其余地方返回False

在Pandas中,可以使用isnull()方法或其别名isna(),这两个方法会返回一个与原DataFrame大小相同的布尔型DataFrame,其中空值的地方返回True,非空值的地方返回False。

df.isnull().head(n) # 前n行数值

保存数据

1.确保已经导入了Pandas库,并且有一个名为df的DataFrame变量,它包含了你想要保存的数据。

2.使用to_csv方法将DataFrame保存到一个新的CSV文件中。可以指定文件的路径和文件名。 

   ①如果想在当前工作目录下保存文件,可以直接提供文件名。 

   ②如果不希望在新文件中包含原始DataFrame的索引,可以将index参数设置为False。

import pandas as pd
# 假设df是您已经更改过的DataFrame
# ...(在这里进行数据更改)...
# 将更改后的DataFrame保存到新的CSV文件中,不包含索引
df.to_csv('changed_data.csv', index=False)

Task2  Pandas基础 

对列的操作 

查看DataFrame数据的每列的名称

df.columns

查看"Cabin"这列的所有值 

df['Cabin']
# 或者
df.Cabin

删除某一列

方法一:

使用drop方法:通过指定列名来删除一列。

import pandas as pd
# 假设df是你的DataFrame对象,'column_name'是你想要删除的列的名称
df_dropped = df.drop('column_name', axis=1)
# 打印删除列后的DataFrame
print(df_dropped)

方法二:                                                                              

使用del关键字:使用del关键字直接删除列。这种方法会直接在原DataFrame上进行修改,而不是创建一个新的DataFrame。

import pandas as pd
# 假设df是你的DataFrame对象,'column_name'是你想要删除的列的名称
del df['column_name']
# 打印删除列后的DataFrame
print(df)

方法三: 

使用pop方法:pop方法也可以用来删除列,并且它会返回被删除的列。

import pandas as pd
# 假设df是你的DataFrame对象,'column_name'是你想要删除的列的名称
popped_column = df.pop('column_name')
# 打印删除列后的DataFrame
print(df)
# 打印被删除的列
print(popped_column)

隐藏某一列

在不改变原始DataFrame的情况下临时隐藏数据,可以使用drop函数结合inplace参数,并将axis参数设置为0。这样做不会从DataFrame中移除数据,而是在显示时隐藏它们。

# 假设df是您的DataFrame对象
# 隐藏单个列
df.drop('column_name', axis=0, inplace=True)
# 隐藏多个列
df.drop(['column_name1', 'column_name2'], axis=1, inplace=True)

在上述代码中,inplace=True参数指示Pandas直接修改原始的DataFrame,而不是返回一个新的DataFrame对象。axis=1表示操作的是列,axis=0表示操作的是行,因此在这种情况下,它会影响到列的可见性而不是实际删除列。

筛选的逻辑

以"Age"为筛选条件,显示年龄在10岁以下的乘客信息

df[df['Age']<10]

以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage

midage = df[(df['Age']>10)&(df['Age']<50)]

将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来

midage.loc[[100],['Pclass','Sex']]

使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来 

midage.loc[[100,105,108],['Pclass','Name','Sex']]

使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来

midage.iloc[[100,105,108],[2,3,4]]

Task3  探索性数据分析

 了解数据

构建一个都为数字的DataFrame数据

frame = pd.DataFrame(np.arange(8).reshape((2, 4)),index=['2', '1'],columns=['d', 'a', 'b', 'c'])

# 【代码解析】
# pd.DataFrame() :创建一个DataFrame对象
# np.arange(8).reshape((2, 4)) : 生成一个二维数组(2*4),第一列:0,1,2,3 第二列:4,5,6,7
# index=['2, 1] :DataFrame对象的索引列
# columns=['d', 'a', 'b', 'c'] :DataFrame对象的索引行

输出结果为: 

将你构建的DataFrame中的数据根据某一列,升序排列

在Pandas中,可以使用sort_values()方法根据DataFrame中的某一列对数据进行排列。默认情况下,sort_values()会执行升序排序,但可以通过设置ascending=False参数来进行降序排序。

sort_values函数中by参数指向要排列的列,ascending参数指向排序的方式(升序还是降序)。 

frame.sort_values(by='c',ascending=True) # 根据 c 列升序排序
frame.sort_values(by='c',ascending=False) # 根据 c 列降序排序

将不同的排序方式做一个总结

1.让行索引升序排序

frame.sort_index()

2.让列索引升序排序

frame.sort_index(axis=1)

3.让列索引降序排序

frame.sort_index(axis=1,ascending=False)

4.让任选两列(a和c列)数据同时降序排序

frame.sort_values(by=['a','c'],ascending=False)

利用Pandas计算两个DataFrame数据相加结果

# 创建两个DataFrame
frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
                     columns=['a', 'b', 'c'],
                     index=['one', 'two', 'three'])
frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
                     columns=['a', 'e', 'c'],
                     index=['first', 'one', 'two', 'second'])
frame1_a
frame1_b

 输出结果为:

# 方法一:使用 + 运算符
frame1_a + frame1_b
# 方法二:使用add()
frame1_a.add(frame1_b)

输出结果为: 

两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。 

假设你有一个名为text的DataFrame,其中包含'A'和'B'两列,计算'A'和'B'两列和的最大值

max(text['A']+text['B'])

Task4

代码解析 

分别将单属性与双属性的妖怪在当前目录下存储为不同csv文件

data = pd.read_csv('./pokemon.csv')
single = data[data['属性二'].isnull()]
single.drop(columns=['属性二'])
single.to_csv('./single.csv',index=False)

代码解析:

代码的目的是从原始DataFrame中筛选出具有单个属性的妖怪,并将这些妖怪的数据保存到一个名为 'single.csv' 的CSV文件中。
1.single = data[data['属性二'].isnull()]
这行代码使用了Pandas的布尔索引来选择原始DataFrame data中 '属性二' 列值为 NaN 的所有行。isnull() 函数返回一个布尔系列,指示每个元素是否为缺失值(NaN),然后通过索引操作选择出所有匹配的行,形成一个新的DataFrame single。
2.single.to_csv('./single.csv', index=False)
这行代码将修改后的 single DataFrame 保存到本地文件系统中的当前目录,文件名为 'single.csv'。index=False 参数指示在保存时不包括行索引。 

dual = data[data['属性二'].notnull()]
dual.drop(columns=['属性一'])
dual.to_csv('./dual.csv',index=False)

 代码解析:       

代码的目的是从原始DataFrame中筛选出具有双属性的妖怪,并将这些妖怪的数据保存到一个名为 'dual.csv' 的CSV文件中。
①dual = data[data['属性二'].notnull()]
这行代码使用了Pandas的布尔索引来选择原始DataFrame data中 '属性二' 列值不为 NaN 的所有行。notnull()函数返回一个布尔系列,指示每个元素是否为非缺失值(即非 NaN),然后通过索引操作选择出所有匹配的行,形成一个新的DataFrame dual。
②dual.to_csv('./dual.csv', index=False)
这行代码将筛选后的 dual DataFrame 保存到本地文件系统中的当前目录,文件名为 'dual.csv'。index=False 参数指示在保存时不包括行索引。

输出 DataFrame data 中每列有多少个不同的值

print(data.nunique())

代码解析:                                                                                                                                   

data: 这是一个 DataFrame 对象,它包含了多个列的数据。                                                            .nunique(): 这是 Pandas DataFrame 的一个方法,用于计算每列中唯一值的数量。它返回一个 Series,其中索引是列名,值是该列中唯一值的数量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值