Pandas库入门仅需10分钟

数据处理的时候经常性需要整理出表格,在这里介绍pandas常见使用,目录如下:

参考链接:10 minutes to pandas https://pandas.pydata.org/docs/user_guide/10min.html#min


数据结构

Pandas常见的就两种数据类型:Series和DataFrame,可以对应理解为向量和矩阵,前者是一维的,后者是二维的。在DF中类似统计学中的数据组织方式,一行代表一项数据,一列代表一种特征,用这种方式记忆能够帮你更好理解DF。需要注意的是:在DF中index是行,column是列。

请添加图片描述

请添加图片描述

导入导出数据

常使用.csv格式的文件,我们在导入数据的时候使用pd.read_csv(),在导出数据的时候用df.write_csv(“/data/ymz.csv”).

# 读入数据
In [144]: pd.read_csv("foo.csv")
Out[144]: 
     Unnamed: 0          A          B          C          D
0    2000-01-01   0.350262   0.843315   1.798556   0.782234
1    2000-01-02  -0.586873   0.034907   1.923792  -0.562651
2    2000-01-03  -1.245477  -0.963406   2.269575  -1.612566
3    2000-01-04  -0.252830  -0.498066   3.176886  -1.275581
4    2000-01-05  -1.044057   0.118042   2.768571   0.386039
..          ...        ...        ...        ...        ...
995  2002-09-22 -48.017654  31.474551  69.146374 -47.541670
996  2002-09-23 -47.207912  32.627390  68.505254 -48.828331
997  2002-09-24 -48.907133  31.990402  67.310924 -49.391051
998  2002-09-25 -50.146062  33.716770  67.717434 -49.037577
999  2002-09-26 -49.724318  33.479952  68.108014 -48.822030

[1000 rows x 5 columns]
# 写出数据
In [143]: df.to_csv("foo.csv")

对数据进行操作

对数据操作包括增(创建),删,改,查。

增加数据(创建数据)

相比较Series,我们更常使用DataFrame数据类型,常使用的创建DataFrame类型有两种,一种是使用data创建(注意data得是一个二维list/array等),一种是使用字典创建。

1. 使用data创建DF

# 使用data导入
In [5]: dates = pd.date_range("20130101", periods=6)

In [6]: dates
Out[6]: 
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
               '2013-01-05', '2013-01-06'],
              dtype='datetime64[ns]', freq='D')

In [7]: df = pd.DataFrame(data=np.random.randn(6, 4), index=dates, columns=list("ABCD"))

In [8]: df
Out[8]: 
                   A         B         C         D
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804
2013-01-04  0.721555 -0.706771 -1.039575  0.271860
2013-01-05 -0.424972  0.567020  0.276232 -1.087401
2013-01-06 -0.673690  0.113648 -1.478427  0.524988

2. 使用字典创建DF

# 使用字典
In [9]: df2 = pd.DataFrame(
   ...:     {
   ...:         "A": 1.0,
   ...:         "B": pd.Timestamp("20130102"),
   ...:         "C": pd.Series(1, index=list(range(4)), dtype="float32"),
   ...:         "D": np.array([3] * 4, dtype="int32"),
   ...:         "E": pd.Categorical(["test", "train", "test", "train"]),
   ...:         "F": "foo",
   ...:     }
   ...: )
   ...: 

In [10]: df2
Out[10]: 
     A          B    C  D      E    F
0  1.0 2013-01-02  1.0  3   test  foo
1  1.0 2013-01-02  1.0  3  train  foo
2  1.0 2013-01-02  1.0  3   test  foo
3  1.0 2013-01-02  1.0  3  train  foo

3. 增加一行数据

1)使用loc在行尾增加

增加一行数据的方法有loc, iloc, append, concat, merge。这里介绍一下loc,loc[index]是在一行的最后增加数据。但是你需要注意loc[index]中的index,如果与已出现过的index相同,则会覆盖原先index行,若不相同则才会增加一行数据。

请添加图片描述

2)使用concat将两个DF合并

concat()也是一个增加数据常用的方法,常见于两个表的拼接与爬虫使用中,作用类似于append(),但是append()将在不久后被pandas舍弃,所以还是推荐使用concat()。

在这里插入图片描述

请添加图片描述

案例如下:

import pandas as pd

# 创建原始df
DF_NAMES = ["training_loss", "validation_loss"]
df = pd.DataFrame(columns=DF_NAMES)

# 增加新的一列
item = pd.DataFrame(data=[[0.1, 0.5]], columns=DF_NAMES)
df = pd.concat([df, item])

# 存储
df.to_csv("/home/yingmuzhi/microDL_2_0/train/train_loss.csv")

4. 增加一列数据

增加一列数据的方法直接用[]便可,例子如下:

请添加图片描述

Series用的比较少,案例如下:

In [3]: s = pd.Series([1, 3, 5, np.nan, 6, 8])

In [4]: s
Out[4]: 
0    1.0
1    3.0
2    5.0
3    NaN
4    6.0
5    8.0
dtype: float64

删除数据

对于删除数据,我们使用drop()方法,并指定参数为index(行)或者column(列)

1. 删除一行数据

在这里插入图片描述

2. 删除一列数据

在这里插入图片描述

改动数据

改动一行,列数据常用loc()和[]方法。

1. 改动一行数据

改动一行我们使用loc[]=[…]进行更改。

在这里插入图片描述

2. 改动一列数据

改动一列数据我们使用[]进行更改。

请添加图片描述

查找数据

在查找数据的时候,我们常使用[]来查看行列数据,配合.T来将矩阵转置。也可以使用head(),tail()来查看前几行和后几行数据。

0. 使用df.loc[]或者df.iloc[]查找特定行列

  1. 查找列

在 pandas 中,可以使用 pd.loc 选择特定的列。要选择列,需要提供一个行索引,然后使用 : 表示选择所有行,最后使用一个列名或列名列表来指定要选择的列。

以下是一个简单的示例,演示如何使用 pd.loc 选择特定的列:

import pandas as pd

# 创建示例数据
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'Age': [25, 30, 35, 40, 45],
    'Salary': [5000, 6000, 7000, 8000, 9000]
}
df = pd.DataFrame(data)

# 选择 'Name' 和 'Salary' 列
selected_cols = df.loc[:, ['Name', 'Salary']]
print(selected_cols)

输出结果:

       Name  Salary
0     Alice    5000
1       Bob    6000
2   Charlie    7000
3     David    8000
4       Eva    9000

在这个示例中,df.loc[:, [‘Name’, ‘Salary’]] 选择所有行,但只选择了 ‘Name’ 和 ‘Salary’ 两列。: 表示选择所有行。[‘Name’, ‘Salary’] 列表指定了要选择的列名。

  1. 查找行

在 Pandas 中,可以使用 pd.loc 选择特定的行。要选择行,需要提供一个行索引,然后使用 : 表示选择所有列,最后使用一个整数、一个整数列表或一个布尔值序列来指定要选择的行。

以下是一个简单的示例,演示如何使用 pd.loc 选择特定的行:

import pandas as pd

# 创建示例数据
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'Age': [25, 30, 35, 40, 45],
    'Salary': [5000, 6000, 7000, 8000, 9000]
}
df = pd.DataFrame(data, index=['A', 'B', 'C', 'D', 'E'])

# 选择第二行和第四行
selected_rows = df.loc[['B', 'D'], :]
print(selected_rows)

输出结果:

     Name  Age  Salary
B     Bob   30    6000
D   David   40    8000

在这个示例中,df.loc[['B', 'D'], :] 选择了 ‘B’ 和 ‘D’ 两行,但选择了所有列。[['B', 'D'], :] 表示要选择 ‘B’ 和 ‘D’ 两行,但选择了所有列。注意,第一个冒号(:)指定了要选择所有列。如果只想选择某些列,可以将它们的列名放在第二个位置。如果要选择一系列连续的行,可以使用整数范围,例如 df.loc['A':'C', :] 选择了 ‘A’、‘B’ 和 ‘C’ 三行。如果要选择满足某些条件的行,可以使用一个布尔值序列,例如 df.loc[df['Age'] > 30, :] 选择了 ‘Charlie’、‘David’ 和 ‘Eva’ 三行,因为它们的年龄大于 30。

如果使用df.iloc[]则和loc类似,区别就是这个函数中使用的是索引数字,如:

# 选择第二列和第三列
selected_cols = df.iloc[:, [1, 2]]
print(selected_cols)

# 选择第二行和第四行
selected_rows = df.iloc[[1, 3], :]
print(selected_rows)

1. 查看特定行数据

使用.loc[index]来查看特定行数据,或者[]。建议使用.loc[]方法或者.iloc[]方法,loc[]通过行的名字寻找,iloc[]通过索引寻找。

使用类似[0:2]来查看特定行数据,和python中list使用类似。这个方法其实是调用了__getitem__()方法

请添加图片描述

2. 查看特定列数据

我们需要使用两层[]嵌套来访问数据,例如[ [“j”, “i”] ]。

在这里插入图片描述

3. 查看特定元素

确定第几行第几列后,使用.loc()方法或者.iloc()方法查找。

b = a.loc[ 1, "dir_name" ]

常用操作

数据分析时常用的两个操作,转置和计算统计量。

1. 转置

使用.T便可以完成。

请添加图片描述

2. 计算统计量

使用.describe()。

请添加图片描述

3. 舍弃一列中多余重复数据

使用.drop_duplicates()

id_df = self.frames_meta_sub[['time_idx', 'pos_idx', 'slice_idx']].drop_duplicates()

4. 将特定列转成numpy后处理

使用.to_numpy()方法将你所选择的数据全部转成二维的或者一维的ndarray,需要注意的是to_numpy()并不仅仅局限于数字,字符串也是可以转换的(虽然这样开销比较大),ndarray能存储字符串,这会让你处理数据的过程变得异常简单。有几个维度取决于你取了几行或者几列。

df = df[ ["channel"] ]
ar = df.to_numpy()

5. 取出dataframe中特定位置的值

要取出 DataFrame 中特定位置的值,可以使用 .loc 或 .iloc 方法,具体取决于您想要使用的索引类型。

如果您使用标签索引(例如,行和列都使用标签名称),则可以使用 .loc 方法。例如,如果您有一个名为 df 的 DataFrame,它具有行标签为 row_label,列标签为 column_label 的元素,则可以使用以下代码获取该元素的值:

value = df.loc[row_label, column_label]

如果您使用整数位置索引(例如,行和列都使用整数位置),则可以使用 .iloc 方法。例如,如果您有一个名为 df 的 DataFrame,它具有第一个行和第一个列的元素,则可以使用以下代码获取该元素的值:

value = df.iloc[0, 0]

请注意,索引从零开始,因此第一个行和第一个列的位置为 0。

5. 使用DataFrame创建df

import pandas as pd

# 创建原始df
DF_NAMES = ["training_loss", "validation_loss"]
df = pd.DataFrame(columns=DF_NAMES)

# 增加新的一列
item = pd.DataFrame(data=[[0.1, 0.5]], columns=DF_NAMES)
df = pd.concat([df, item])

# 存储
df.to_csv("/home/yingmuzhi/microDL_2_0/train/train_loss.csv")

6. pandas 将多个list拼接成一个DataFrame

你可以使用 pandas.DataFrame 函数来将多个列表拼接成一个 DataFrame。这个函数需要传递一个字典,其中字典的键是你想要在 DataFrame 中使用的列名,而字典的值是一个对应的列表。

例如,假设你有三个列表 list1、list2 和 list3,它们都具有相同的长度,并且你想将它们拼接成一个 DataFrame。你可以按照以下方式使用 pandas.DataFrame 函数:

import pandas as pd

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = [4.5, 6.7, 8.9]

df = pd.DataFrame({'col1': list1, 'col2': list2, 'col3': list3})

这会创建一个 DataFrame,其中列名为 ‘col1’、‘col2’ 和 ‘col3’,而值则分别来自 list1、list2 和 list3。

你还可以将列名存储在另一个列表中,并将它们与列表数据一起传递给 pandas.DataFrame 函数:

import pandas as pd

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = [4.5, 6.7, 8.9]
columns = ['col1', 'col2', 'col3']

df = pd.DataFrame(list(zip(list1, list2, list3)), columns=columns)

这将创建一个相同的 DataFrame,只不过它使用了一个 columns 列表来指定列名。

7. pandas 将两个DataFrame合并后 将第一列的序号重新排序

要将两个DataFrame合并并重新排序第一列的序号,可以按以下步骤操作:

首先将两个DataFrame合并为一个DataFrame,使用pd.concat()函数进行合并,设定axis=0表示按行合并。假设两个DataFrame为df1和df2,合并后的DataFrame为df,则代码如下:

df = pd.concat([df1, df2], axis=0)

重新排序第一列的序号,可以使用reset_index()函数重新生成序号,然后再将生成的序号赋值给第一列。假设第一列的列名为’index’,则代码如下:

df = df.reset_index()
df['index'] = range(1, len(df)+1)

如果此时你发现你的列表是有两列index的,而你觉得这样看起来不舒服,你可以选择删掉这一列:

请添加图片描述

代码如下:

df = df.drop(column=["index"])

8. python 生成一个列表,这个列表全部用"train"填充,且他的长度要等于另一个列表的长度

new_list = ["train"]*len(old_list)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值