Pandas是一个强大的Python库,用于数据分析和数据处理。它提供了高效的数据结构和数据操作工具,特别适用于处理结构化数据。
下面是一些常用的Pandas使用技巧和示例:
-
导入Pandas库:
import pandas as pd
-
创建Series(序列)对象:
s = pd.Series([1, 3, 5, np.nan, 6, 8])
-
创建DataFrame(数据框)对象:
data = {'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35], 'city': ['New York', 'Seattle', 'Los Angeles']} df = pd.DataFrame(data)
-
读取保存数据文件:
# 读取 df = pd.read_csv('data.csv') # 保存 df.to_csv('data.csv')
-
查看数据:
df.head() # 查看前几行数据,默认为前5行 df.tail() # 查看后几行数据,默认为后5行 df.shape # 查看数据的行数和列数 df.info() # 查看数据的基本信息 df.describe() # 查看数据的描述性统计信息
-
数据选择和切片:
df['column_name'] # 选择某一列 df[['col1', 'col2']] # 选择多列 df.loc[row_indexer] # 通过行索引选择数据 df.loc[row_indexer, column_indexer] # 通过行索引和列索引选择数据 df.iloc[row_indexer] # 通过行位置选择数据 df.iloc[row_indexer, column_indexer] # 通过行位置和列位置选择数据
-
数据筛选:
df[df['column_name'] > value] # 筛选出某列大于某个值的数据 df.query('column_name > value') # 使用query()方法筛选数据 df[(df['column1'] > value1) & (df['column2'] < value2)] # 使用逻辑运算符筛选数据
-
缺失值处理:
df.dropna() # 删除包含缺失值的行 df.dropna(axis=1) # 删除包含缺失值的列 df.fillna(value) # 填充缺失值为指定值 res['value_x'] = res['value_x'].fillna(0) # 填充某一列的缺失值为指定值
-
数据排序:
df.sort_values(by='column_name') # 按某一列排序数据 df.sort_values(by=['col1', 'col2']) # 按多列排序数据 df.sort_index() # 按索引排序数据
-
数据分组和聚合:
df.groupby('column_name').mean() # 按某一列进行分组,并计算平均值 df.groupby(['col1', 'col2']).sum() # 按多列进行分组,并计算总和
- 将时间字符串列转换为时间类型的
df['date'] = pd.to_datetime(df['date'])
- 以一列为条件判断,生成另一列的值(判断是否为节假日)
def is_workday(date): return np.is_busday(np.datetime64(date, 'D'), holidays=['2023-05-01', '2023-05-02', '2023-05-03', '2023-06-22', '2023-06-23', '2023-06-24', '2023-09-29', '2023-09-30', '2023-10-01', '2023-10-02', '2023-10-03', '2023-10-04', '2023-10-05', '2023-10-06']) df0 = pd.read_csv('data.csv', low_memory=False) df0['date'] = pd.to_datetime(df0['date']) df0.loc[df0['date'].apply(is_workday), 'holiday'] = 0
- 对某一列去重
按照interval_start列进行去重,并保留device_time列时间早的一个值 df = res.sort_values('device_time').drop_duplicates('interval_start', keep='last') ''' subset:指定用于判断重复的列名或列名列表。默认为 None,表示考虑所有列。如果指定了列名或列名列表,函数将根据这些列的值来判断是否为重复行。 keep:指定保留哪个重复行,默认为 'first'。可选的值有: 'first':保留第一个出现的重复行,删除后续的重复行。 'last':保留最后一个出现的重复行,删除前面的重复行。 False:删除所有重复行。 inplace:是否在原地修改 DataFrame,默认为 False。如果设置为 True,则会直接在原 DataFrame 上进行修改,而不返回新的 DataFrame '''
- 合并两个Datafram
res = pd.merge(df0 df1, left_on='interval_start', right_on='interval_start', how='outer', sort=True)
'''
left:左侧的DataFrame。
right:右侧的DataFrame。
on:指定用于合并的列名或列名列表。如果左右两个DataFrame的列名不同,可以使用left_on和right_on参数分别指定左右DataFrame的列名。
left_on:左侧DataFrame用于合并的列名或列名列表。
right_on:右侧DataFrame用于合并的列名或列名列表。
how:指定合并方式,默认为'inner'。可选的合并方式有:
'inner':内连接,保留两个DataFrame中共有的行。
'outer':外连接,保留两个DataFrame中的所有行,缺失值用NaN填充。
'left':左连接,保留左侧DataFrame的所有行。
'right':右连接,保留右侧DataFrame的所有行。
suffixes:用于区分重复列名的后缀,默认为('_x', '_y')。
sort:根据合并键对结果进行排序,默认为False。
validate:验证合并方式的有效性,默认为None。可选的值有'one_to_one'、'one_to_many'、'many_to_one'和'many_to_many'
'''
这些示例只是Pandas库的一部分功能,Pandas还提供了很多其他强大的功能,如数据重塑、数据合并、时间序列处理等。你可以通过查阅Pandas官方文档来了解更多详细的用法和示例。