如何在Pandas中创建空DataFrame并添加行和列?
Pandas是一个Python库,可以方便地处理海量数据。在Pandas中,DataFrame是一种二维表格数据结构,可以看做是由多个Series组成的,每个Series代表了一列数据。在实际的数据处理中,我们有时需要创建一个空的DataFrame,并动态地添加行和列。本文将介绍如何在Pandas中创建空的DataFrame,并演示如何添加行和列。
创建空的DataFrame
在Pandas中,创建一个空的DataFrame非常简单,只需要调用DataFrame
构造函数即可,不过需要注意的是,创建空的DataFrame需要指定列名和数据类型。
import pandas as pd
# 创建空的DataFrame
df = pd.DataFrame(columns=['name', 'age', 'gender'], dtype=int)
# 查看DataFrame的信息
print(df.info())
输出结果为:
<class 'pandas.core.frame.DataFrame'>
Index: 0 entries
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 0 non-null int64
1 age 0 non-null int64
2 gender 0 non-null int64
dtypes: int64(3)
memory usage: 0.0+ bytes
None
可以看到,创建的DataFrame没有任何行数据,但是已经定义好了三列,分别为name
、age
和gender
,数据类型为整型。注意,这里的列名和数据类型是可选的,如果不指定的话,Pandas会自动进行推断,但是推断的结果可能不是我们期望的。因此,建议在创建空的DataFrame时,明确指定列名和数据类型。
添加行
在上面的示例中,我们创建了一个空的DataFrame,接下来我们将演示如何添加行数据。在Pandas中,添加行数据有两种方式,一种是通过loc
属性,另一种是通过append
方法。
通过loc
属性添加行
loc
是Pandas中一个用于标签索引的属性,通过它可以方便地添加一行数据。示例如下:
import pandas as pd
# 创建空的DataFrame
df = pd.DataFrame(columns=['name', 'age', 'gender'])
# 通过loc属性添加行数据
df.loc[0] = ['Alice', 18, 'female']
df.loc[1] = ['Bob', 21, 'male']
df.loc[2] = ['Cathy', 25, 'female']
# 查看DataFrame的内容
print(df)
输出结果为:
name age gender
0 Alice 18 female
1 Bob 21 male
2 Cathy 25 female
可以看到,我们成功地向空的DataFrame中添加了三行数据。
需要注意的是,在使用loc
属性添加行数据时,需要指定行标签,也就是index
。如果行标签已经存在,则会修改相应行的数据;如果行标签不存在,则会新建一行,并填充数据。
通过append
方法添加行
另一种添加行数据的方式是使用append
方法。append
方法可以接受一个字典、一个Series或一个DataFrame作为参数,它会将参数中的数据作为一行添加到原DataFrame的末尾。示例如下:
import pandas as pd
# 创建空的DataFrame
df = pd.DataFrame(columns=['name', 'age', 'gender'])
# 通过append方法添加行数据
df = df.append({'name': 'Alice', 'age': 18, 'gender': 'female'}, ignore_index=True)
df = df.append({'name': 'Bob', 'age': 21, 'gender': 'male'}, ignore_index=True)
df = df.append({'name': 'Cathy', 'age': 25, 'gender': 'female'}, ignore_index=True)
# 查看DataFrame的内容
print(df)
输出结果同上。
需要注意的是,在使用append
方法添加行数据时,需要将ignore_index
参数设置为True,这是因为
append方法默认会保留原DataFrame的索引,如果不将
ignore_index设置为
True`,则新添加的行数据的索引会和原DataFrame的索引重复,导致索引冲突,因此需要将新添加的行数据的索引重新编号。
添加列
除了添加行数据,有时我们也需要添加列数据。在Pandas中,添加列数据非常简单,只需要通过列名即可。示例如下:
import pandas as pd
# 创建空的DataFrame
df = pd.DataFrame(columns=['name', 'age', 'gender'])
# 添加列数据
df['height'] = [170, 175, 165]
# 查看DataFrame的内容
print(df)
输出结果为:
name age gender height
0 NaN NaN NaN 170
1 NaN NaN NaN 175
2 NaN NaN NaN 165
可以看到,我们成功地向空的DataFrame中添加了一列数据,列名为height
,数据分别为170、175、165。
需要注意的是,添加列数据时,数据的长度必须和DataFrame的行数相同,否则会报错。如果数据长度大于行数,则多出来的数据会被忽略;如果数据长度小于行数,则会报错。
修改行和列数据
更新DataFrame中的数据可以使用at
、iat
、loc
和iloc
等属性或方法。其中,at
和iat
用于精确定位单个元素,loc
和iloc
用于选择多个元素。
修改单个元素
如果要修改DataFrame中的单个元素,可以使用at
和iat
属性。at
和iat
的用法类似,但是at
用于使用行标签和列标签定位元素,iat
用于使用行索引和列索引定位元素。
示例如下:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Cathy'], 'age': [18, 21, 25], 'gender': ['female', 'male', 'female']})
# 查看DataFrame的内容
print(df)
# 修改单个元素
df.at[1, 'age'] = 22
df.iat[2, 0] = 'David'
# 查看DataFrame的内容
print(df)
修改前的输出结果为:
name age gender
0 Alice 18 female
1 Bob 21 male
2 Cathy 25 female
修改后的输出结果为:
name age gender
0 Alice 18 female
1 Bob 22 male
2 David 25 female
可以看到,我们成功地将第二行的年龄修改为22,将第三行的名字修改为David。
修改多个元素
如果要同时修改多个元素,可以使用loc
和iloc
属性或方法选择多个元素。loc
和iloc
的用法类似,但是loc
用于使用行标签和列标签选择元素,iloc
用于使用行索引和列索引选择元素。
示例如下:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Cathy'], 'age': [18, 21, 25], 'gender': ['female', 'male', 'female']})
# 查看DataFrame的内容
print(df)
# 修改多个元素
df.loc[1:2, 'age':'gender'] = [[22, 'male'], [23, 'male']]
# 查看DataFrame的内容
print(df)
修改前的输出结果为:
name age gender
0 Alice 18 female
1 Bob 21 male
2 Cathy 25 female
修改后的输出结果为:
name age gender
0 Alice 18 female
1 Bob 22 male
2 Cathy 23 male
可以看到,我们成功地将第二、三行的年龄和性别修改了。
需要注意的是,在使用loc
和iloc
选择多个元素时,语法和切片语法类似,但不包含右端点,即选择的元素为左端点到右端点前一个元素。此外,选择元素时可以使用布尔数组,将指定位置的元素选取出来。
删除行和列
如果要删除DataFrame中的行或列,可以使用drop
方法或del
语句。drop
方法用于删除行或列,而del
语句仅用于删除列。
删除行
要删除DataFrame中的行,可以使用drop
方法,示例如下:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Cathy'], 'age': [18, 21, 25], 'gender': ['female', 'male', 'female']})
# 查看DataFrame的内容
print(df)
# 删除第二行
df = df.drop(1)
# 查看DataFrame的内容
print(df)
删除前的输出结果为:
name age gender
0 Alice 18 female
1 Bob 21 male
2 Cathy 25 female
删除后的输出结果为:
name age gender
0 Alice 18 female
2 Cathy 25 female
可以看到,我们成功地删除了第二行。
需要注意的是,drop
方法返回一个新的DataFrame,原DataFrame并没有被修改。如果要在原DataFrame上直接删除行,可以使用inplace
参数,将其设置为True
。
删除列
要删除DataFrame中的列,可以使用drop
方法或del
语句。使用drop
方法删除列时,需要将axis
参数设置为1
,示例如下:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Cathy'], 'age': [18, 21, 25], 'gender': ['female', 'male', 'female']})
# 查看DataFrame的内容
print(df)
# 删除age列
df = df.drop('age', axis=1)
# 查看DataFrame的内容
print(df)
删除前的输出结果为:
name age gender
0 Alice 18 female
1 Bob 21 male
2 Cathy 25 female
删除后的输出结果为:
name gender
0 Alice female
1 Bob male
2 Cathy female
可以看到,我们成功地删除了age列。
使用del
语句删除列时,只需要指定要删除的列名即可,示例如下:
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Cathy'], 'age': [18, 21, 25], 'gender': ['female', 'male', 'female']})
# 查看DataFrame的内容
print(df)
# 删除age列
del df['age']
# 查看DataFrame的内容
print(df)
删除前的输出结果同上,删除后的输出结果同上。
需要注意的是,无论是使用drop
方法还是del
语句删除列,都不能直接删除多列。如果要删除多列,可以使用切片语法,或多次调用drop
方法。
结论
在本文中,我们演示了如何在Pandas中创建空的DataFrame,并添加行和列。同时,我们还介绍了如何修改DataFrame中的行和列数据,以及如何删除DataFrame中的行和列。这些操作是Pandas中基本的数据处理技巧,也是进行数据分析和建模的基础。希望本文能帮助您更好地掌握Pandas的使用。