kaggle入门之pd.DataFrame

本文详细介绍了Pandas库中DataFrame数据结构的创建、属性查看、下标和索引操作,包括创建DataFrame、查看dtypes、head/tail、index/columns、values属性,以及at/loc的使用。此外,还讲解了map和apply方法处理数据,以及如何检查和处理缺失值。最后展示了如何从DataFrame中提取列生成字典。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看各种kaggle的代码时,发现pd.DataFrame是常用的数据结构,要想快速浏览、熟练修改各种kaggle代码,首先入门的应该是pd.DataFrame这个结构,下面记录pd.DataFrame常用的几种函数。

1、创建DataFrame

import pandas as pd 
import numpy as np

#数据,行名,列名
df1 = pd.DataFrame(np.random.randn(3, 3), index=list('abc'), columns=list('ABC'))

#也可以用字典创建
dic1 = {
    'name': ['张三', '李四', '王二', '小七'],
    'age': [37, 70, 35, 10],
    'gender': ['男', '男', '男', '女']
    }
df = pd.DataFrame(dic1)

#输出结果
  name  age gender
0   张三   371   李四   702   王二   353   小七   10

2、DataFrame属性

2.1、查看属性

import pandas as pd
print(df.dtypes)

#输出结果:
name      object
age        int64
gender    object
dtype: object

2.2、查看DataFrame头和尾,默认是5行

print(df.head(2))
print(df.tail(2))

#输出结果:
  name  age gender
0   张三   371   李四   70      男
  name  age gender
2   王二   353   小七   10

2.3 查看行名与列名

print(df.index)
print(df.columns)

#输出结果:
RangeIndex(start=0, stop=4, step=1)
Index(['name', 'age', 'gender'], dtype='object')

2.4 df.values 查看数据值,返回ndarray类型的对象

print(df.values)
print (type(df.values))
<class 'numpy.ndarray'>
[['张三' 37 '男']
 ['李四' 70 '男']
 ['王二' 35 '男']
 ['小七' 10 '女']]

2.5 df.empty判断DataFrame是否为空

df_empty = pd.DataFrame({'A' : []})
print(df_empty)

#输出结果:
Empty DataFrame
Columns: [A]
Index: []

print(df_empty.empty)
#输出结果:
True

3、DataFrame 下标、索引

3.1 df.at

访问行/列标签对的单个值,如果label不存在,返回错误

dic1 = {
    'name': ['张三', '李四', '王二', '小七'],
    'age': [37, 70, 35, 10],
    'gender': ['男', '男', '男', '女']
    }

df = pd.DataFrame(dic1)
print(df)
print(df.at[2, 'gender'])

#输出结果:
  name  age gender
0   张三   371   李四   702   王二   353   小七   10      女
男

3.2 df.loc  行操作

将上面的DataFrame的倒置一下,下面将列索引换成[4,5,6,7]是为了说明,loc中的值都是索引’label’值。

dic1 = {
    'name': ['张三', '李四', '王二', '小七'],
    'age': [37, 70, 35, 10],
    'gender': ['男', '男', '男', '女']
    }

df = pd.DataFrame(dic1)

df2 = pd.DataFrame(df.values.T, index=df.columns, columns=[4, 5, 6, 7])
print(df2)

3.2.1 单个 label,返回行内容

print(df2.loc['age'])
#结果:
4    37
5    70
6    35
7    10
Name: age, dtype: object

3.2.2 多个labels, 使用[[]], 返回 a DataFrame

print(df2.loc[['age', 'gender']])

         4   5   6   7
age     37  70  35  10
gender   男   男   男   女

3.2.3 行和列各一个label

print(df2.loc['age', 7])
10

3.2.4 行进行切片,列使用单一label

print(df2.loc['name':'gender', 7])

name      小七
age       10
gender     女
Name: 7, dtype: object

3.2.5 和行的长度一样的布尔行列表

print(df2.loc[[True, False, True]])

         4   5   6   7
name    张三  李四  王二  小七
gender   男   男   男   女

3.2.6  整行重新设值

df2.loc['age'] = 100
print (df2)

          4    5    6    7
name     张三   李四   王二   小七
age     100  100  100  100
gender    男    男    男    女

3.3 df[] 列操作

print (df2[7])

name      小七
age       10
gender     女
Name: 7, dtype: object

4、DataFrame map,apply操作

把gender列中的男换成0, 女换成1

df["gender"] = df["gender"].map({"男":0, "女":1})

apply 方法的作用原理和map方法的类似,区别在于apply能够传入功能更为复杂的函数。

def apply_age(x, bias):
    return x+bias
df["age"] = df["age"].apply(apply_age, args=(3,))

apply 可以接收各种各样的函数(python内置的或者自定义的)

# 沿着0轴求和
data[["height","weight","age"]].apply(np.sum, axis=0)# 沿着0轴取对数
data[["height","weight","age"]].apply(np.log, axis=0)


def BMI(series):
    weight = series["weight"]
    height = series["height"]/100
    BMI = weight/height**2
    return BMI
​
data["BMI"] = data.apply(BMI,axis=1)

5、DataFrame.isna 缺失值判断

df = pd.DataFrame({'age': [5, 6, np.NaN],
                   'born': [pd.NaT, pd.Timestamp('1939-05-27'),
                            pd.Timestamp('1940-04-25')],
                   'name': ['Alfred', 'Batman', ''],
                   'toy': [None, 'Batmobile', 'Joker']})

df.isna()

   age       born    name        toy
0  5.0        NaT  Alfred       None
1  6.0 1939-05-27  Batman  Batmobile
2  NaN 1940-04-25              Joker

 	age 	born 	name 	toy
0 	False 	True 	False 	True
1 	False 	False 	False 	False
2 	True 	False 	False 	False

6、DataFrame 两列生成字典

import pandas as pd
df =pd.DataFrame({'col_1':[1,2],'col_2':[0.5,0.75]})
print (df)
   col_1  col_2
0      1   0.50
1      2   0.75

a = df.set_index(['col_1'])["col_2"].to_dict()
print (a)
{1: 0.5, 2: 0.75}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值