
在 Pandas DataFrame 中,经常需要在排序后插入一行字符串作为标题或说明。直接将字符串添加到数值列会导致排序错误,因为列的数据类型会变成字符串。为了解决这个问题,我们可以先对 DataFrame 进行排序,然后创建一个新的 DataFrame 包含字符串行,最后将两个 DataFrame 合并。
以下是详细步骤和示例代码:
1. 创建 DataFrame
首先,创建一个包含数值数据的 DataFrame。
import pandas as pd
data = {'metricID': ['A', 'B', 'C', 'D'],
'consumo': [10.5, 5.2, 8.9, 12.1]}
df = pd.DataFrame(data)
print(df)输出:
metricID consumo 0 A 10.5 1 B 5.2 2 C 8.9 3 D 12.1
2. 对 DataFrame 排序
使用 sort_values() 方法对 consumo 列进行降序排序。
df = df.sort_values('consumo', ascending=False)
print(df)输出:
metricID consumo 3 D 12.1 0 A 10.5 2 C 8.9 1 B 5.2
3. 创建包含字符串的新行
创建一个新的 DataFrame,包含要添加到顶部的字符串数据。
new_row = pd.DataFrame({'metricID': 'Data frame', 'consumo': 'from:2022-12-01 00:00:00 to:2022-12-14 16:13:00'}, index=[0])
print(new_row)输出:
metricID consumo 0 Data frame from:2022-12-01 00:00:00 to:2022-12-14 16:13:00
4. 合并 DataFrame
使用 pd.concat() 函数将新创建的 DataFrame 与排序后的 DataFrame 合并。 reset_index(drop=True) 用于重置索引,避免索引重复。
df = pd.concat([new_row, df]).reset_index(drop=True) print(df)
输出:
metricID consumo 0 Data frame from:2022-12-01 00:00:00 to:2022-12-14 16:13:00 1 D 12.1 2 A 10.5 3 C 8.9 4 B 5.2
5. 完整代码示例
将以上步骤整合到一个函数中,方便重复使用。
import pandas as pd
def create_excel_with_header(data, header_data, sort_column='consumo', ascending=False):
"""
创建一个包含排序数据和头部字符串行的 DataFrame。
Args:
data (dict): 包含数据的字典,用于创建 DataFrame。
header_data (dict): 包含头部数据的字典,用于创建头部 DataFrame。
sort_column (str): 用于排序的列名,默认为 'consumo'。
ascending (bool): 排序方式,True 为升序,False 为降序,默认为 False。
Returns:
pandas.DataFrame: 合并后的 DataFrame。
"""
df = pd.DataFrame(data)
df = df.sort_values(sort_column, ascending=ascending)
new_row = pd.DataFrame(header_data, index=[0])
df = pd.concat([new_row, df]).reset_index(drop=True)
return df
# 示例数据
data = {'metricID': ['A', 'B', 'C', 'D'],
'consumo': [10.5, 5.2, 8.9, 12.1]}
header_data = {'metricID': 'Data frame', 'consumo': 'from:2022-12-01 00:00:00 to:2022-12-14 16:13:00'}
# 创建 DataFrame
final_df = create_excel_with_header(data, header_data)
print(final_df)
# 如果需要导出到 Excel
# final_df.to_excel('output.xlsx', index=False)注意事项
- 确保 header_data 字典的键与 DataFrame 的列名一致。
- reset_index(drop=True) 用于重置索引,避免出现重复索引。
- 如果需要导出到 Excel,可以使用 to_excel() 方法。
总结
通过以上步骤,我们可以在 Pandas DataFrame 中对数值列进行排序,并在排序后的 DataFrame 顶部添加包含字符串数据的新行。这种方法可以灵活地用于创建包含标题或说明的 Excel 表格或其他数据分析任务。pd.concat() 函数是实现这一目标的关键。










