67. 如何在 Pandas DataFrame 中添加新列?
可以使用 +
运算符、直接赋值或者 insert()
将新列添加到 Pandas 数据帧,如下所示:
import pandas as pd # 创建一个示例 DataFrame df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) # 创建新的 Series df['third']= = pd.Series([7, 8, 9]) #To add new column third df += new_column print (df) # 创建新的 Series new_column = pd.Series([10, 11, 12]) # 分配新列到 DataFrame df['D'] = new_column print(df) # 定义新列的名称和数据 new_column_name = 'E' new_column_data = [13, 14, 15] # 在指定位置插入新列 df.insert(loc=1, column=new_column_name, value=new_column_data) print(df)
68. 如何从 DataFrame 中删除索引名称、行和列?
- 要删除索引名称:可以执行
del df.index._name
或者将索引幅值为None
以按名称删除索引。
import pandas as pd # 创建一个示例 DataFrame df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) # 设置索引名称为 'Index_Name' df.index.name = 'Index_Name' print(df) # 删除索引名称 del df.index._name # 等效于 df.index._name = None print(df) ''' 输出: A B Index_Name 0 1 4 1 2 5 2 3 6 A B 0 1 4 1 2 5 2 3 6 '''
注意:如果在 del df.index._name
之前没有设置索引的名称,那么将提示 AttributeError
错误,因为它只会删除已经存在的索引名称。
- 从 DataFrame 删除行/列:
drop()
方法用于从 DataFrame 中删除行/列。axis=0
表示删除指定行或多行,axis=1
表示删除指定列或多列。
import pandas as pd # 创建一个示例 DataFrame df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) # 删除指定行 df_without_rows = df.drop([0, 2]) print(df_without_rows) # 创建一个示例 DataFrame df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) # 删除指定列 df_without_columns = df.drop(['A'], axis=1) print(df_without_columns)
69. 如何获得序列 A 中没有的序列 B 中的项?
要获取 Series A
中没有的 Series B
中的项,可以使用 Pandas 的 isin()
方法和布尔索引。
以下是一种常见的方法:
import pandas as pd # 创建示例 Series series_a = pd.Series([1, 2, 3, 4]) series_b = pd.Series([3, 4, 5, 6]) # 使用 isin() 方法检查 Series B 中的项是否在 Series A 中 is_in_series_a = series_b.isin(series_a) # 使用布尔索引获取 Series B 中不在 Series A 中的项 result = series_b[~is_in_series_a] print(result)
输出结果如下所示,即为 Series A
中没有的 Series B
中的项:
2 5 3 6 dtype: int64
注意:以上代码假设 Series A 和 Series B 的数据类型相同(都为整数)。如果 Series A 和 Series B 的数据类型不同,需要先将它们转为相同的数据类型。
70. 如何获得序列 A 和序列 B 的非公共项?
要获取序列 A 和序列 B 的非公共项,可以使用 Pandas 的 isin() 方法和布尔索引的结合。
以下是一种常见的方法:
import pandas as pd # 创建示例 Series series_a = pd.Series([1, 2, 3, 4]) series_b = pd.Series([3, 4, 5, 6]) # 使用 isin() 方法检查 Series A 和 Series B 中的元素是否相互存在 is_in_series_a = series_b.isin(series_a) is_in_series_b = series_a.isin(series_b) # 使用布尔索引获取各自序列中不在另一个序列中的项 result = series_a[~is_in_series_b]._append(series_b[~is_in_series_a]) print(result)
输出结果如下所示,即为序列 A 和序列 B 的非公共项:
0 1 1 2 2 5 3 6 dtype: int64
71. Pandas 库可以识别导入的日期和时间数据吗?
是的,Pandas 库可以识别和处理日期和时间数据。当从不同来源导入数据时,Pandas 提供了多种方法来解析和识别日期和时间。
- 使用
pd.to_datetime()
函数:可以使用pd.to_datetime()
函数将字符串转换为 Pandas 的日期时间对象。它可以自动解析多种日期和时间格式,并将其转换为标准的日期时间格式。
import pandas as pd # 示例数据 data = ['2022-01-01 12:00:00', '2022-01-02 13:30:45', '2022-01-03 15:15:00'] # 转换为日期时间对象 datetime_data = pd.to_datetime(data) print(datetime_data)
输出结果如下所示:
DatetimeIndex(['2022-01-01 12:00:00', '2022-01-02 13:30:45', '2022-01-03 15:15:00'], dtype='datetime64[ns]', freq=None)
- 在这个例子中,
pd.to_datetime()
函数将日期时间字符串列表转换为 Pandas 的DatetimeIndex
对象,这是一个包含日期和时间的索引。 dateutil.parser.parse()
:在某些情况下,日期和时间可能具有非标准的格式,无法被自动解析。可以使dateutil.parser.parse()
函数来解析这些字符串。它是 dateutil 库中的一个功能强大的日期时间解析器。
from dateutil.parser import parse import pandas as pd # 示例数据 data = ['01/01/2022 12pm', '01/02/2022 01:30pm', '01/03/2022 03:45pm'] # 解析日期时间字符串 datetime_data = [parse(dt) for dt in data] # 转换为 pandas 的日期时间对象 datetime_data = pd.to_datetime(datetime_data) print(datetime_data)
- 输出结果如下所示:
DatetimeIndex(['2022-01-01 12:00:00', '2022-01-02 13:30:00', '2022-01-03 15:45:00'], dtype='datetime64[ns]', freq=None)