My apologies. I’m making a critical mistake in assuming available tools. I do not have run_shell_command or write_file. Given the tools (list_directory, read_file, search_file_content, glob, save_memory, google_web_search, write_todos, delegate_to_agent), I cannot directly create files.
I will provide the article content here as a text response.
“`
Pandas concat 用法解析:参数与案例
Pandas 库是 Python 数据科学领域不可或缺的工具,而 pandas.concat() 函数则是其在数据整合方面的一个强大功能。它允许用户将多个 DataFrame 或 Series 对象沿着特定轴进行合并。本文将深入解析 concat 函数的各项参数,并通过丰富的案例帮助你掌握其用法。
1. 什么是 pandas.concat()?
pandas.concat() 主要用于将 Pandas 对象(Series 或 DataFrame)连接起来。与 merge 或 join 不同,concat 更多的是一种“堆叠”操作,它将对象堆叠在一起,而不是根据键值进行匹配。
你可以选择沿着行(axis=0)或列(axis=1)进行连接。
2. pandas.concat() 主要参数解析
python
pandas.concat(objs, *, axis=0, join='outer', ignore_index=False, keys=None,
levels=None, names=None, verify_integrity=False, copy=True)
objs: 必需参数。一个 Series 或 DataFrame 对象的序列或映射(例如,列表、元组或字典)。这是你想要连接的所有 Pandas 对象。- 如果
objs是一个字典,字典的键将作为keys参数的值,如果keys未提供。
- 如果
axis: {0/’index’, 1/’columns’}, 默认为 0。axis=0:沿着行轴连接,即垂直堆叠。DataFrame 会增加行数。axis=1:沿着列轴连接,即水平堆叠。DataFrame 会增加列数。
join: {‘inner’, ‘outer’}, 默认为 ‘outer’。'outer':并集。保留所有索引值,缺失值用 NaN 填充。'inner':交集。只保留在所有连接对象中都存在的索引值。
ignore_index: 布尔值,默认为False。True:连接后不保留原始索引,而是生成一个新的从 0 到 n-1 的整数索引。当原始索引没有实际意义或者你希望避免索引重复时非常有用。False:保留原始索引。如果原始索引有重复,这可能会导致问题。
keys: 序列,默认为None。- 如果提供,会为每个连接的 Series/DataFrame 创建一个分层索引(MultiIndex),将
keys中的值作为最外层的索引级别。这对于区分来自不同源的数据非常有用。
- 如果提供,会为每个连接的 Series/DataFrame 创建一个分层索引(MultiIndex),将
names: 序列,默认为None。- 当
keys参数被使用时,names参数可以为 MultiIndex 的级别命名。
- 当
copy: 布尔值,默认为True。True:连接后复制数据。False:不复制数据,这可能会导致性能提升,但修改结果 DataFrame 可能会影响原始 DataFrame。
3. 案例分析
我们将使用以下示例数据:
“`python
import pandas as pd
import numpy as np
示例 DataFrame 1
df1 = pd.DataFrame({
‘A’: [‘A0’, ‘A1’, ‘A2’, ‘A3’],
‘B’: [‘B0’, ‘B1’, ‘B2’, ‘B3’],
‘C’: [‘C0’, ‘C1’, ‘C2’, ‘C3’],
‘D’: [‘D0’, ‘D1’, ‘D2’, ‘D3’]},
index=[0, 1, 2, 3])
示例 DataFrame 2
df2 = pd.DataFrame({
‘A’: [‘A4’, ‘A5’, ‘A6’, ‘A7’],
‘B’: [‘B4’, ‘B5’, ‘B6’, ‘B7’],
‘C’: [‘C4’, ‘C5’, ‘C6’, ‘C7’],
‘D’: [‘D4’, ‘D5’, ‘D6’, ‘D7’]},
index=[4, 5, 6, 7])
示例 DataFrame 3 (部分列不同)
df3 = pd.DataFrame({
‘A’: [‘A8’, ‘A9’, ‘A10’, ‘A11’],
‘B’: [‘B8’, ‘B9’, ‘B10’, ‘B11’],
‘E’: [‘E8’, ‘E9’, ‘E10’, ‘E11’],
‘F’: [‘F8’, ‘F9’, ‘F10’, ‘F11’]},
index=[8, 9, 10, 11])
示例 Series
s1 = pd.Series([‘X0’, ‘X1’, ‘X2’, ‘X3’], index=[‘A’, ‘B’, ‘C’, ‘D’])
s2 = pd.Series([‘Y0’, ‘Y1’, ‘Y2’, ‘Y3’], index=[‘A’, ‘B’, ‘E’, ‘F’])
“`
3.1. 垂直连接 (axis=0)
默认行为是将 DataFrame 沿行方向堆叠。
“`python
垂直连接 df1 和 df2
result_v1 = pd.concat([df1, df2])
print(“垂直连接 df1 和 df2:\n”, result_v1)
结果会是 df1 的行后跟着 df2 的行,索引保持不变,可能重复
垂直连接 df1, df2 和 df3 (包含不同列)
默认 join=’outer’ 会保留所有列,缺失值填充 NaN
result_v2 = pd.concat([df1, df2, df3])
print(“\n垂直连接 df1, df2 和 df3 (outer join):\n”, result_v2)
“`
3.2. 水平连接 (axis=1)
将 DataFrame 沿列方向堆叠。
“`python
水平连接 df1 和 df2
默认 join=’outer’ 会保留所有行索引,缺失值填充 NaN
result_h1 = pd.concat([df1, df2], axis=1)
print(“\n水平连接 df1 和 df2 (outer join):\n”, result_h1)
水平连接 df1 和 df3 (使用 inner join)
只保留共同的行索引
result_h2 = pd.concat([df1, df3], axis=1, join=’inner’)
print(“\n水平连接 df1 和 df3 (inner join):\n”, result_h2)
“`
3.3. 重置索引 (ignore_index=True)
当原始索引不重要或为了避免索引重复时,可以重置索引。
“`python
垂直连接并忽略原始索引
result_ignore_idx = pd.concat([df1, df2], ignore_index=True)
print(“\n垂直连接 df1 和 df2 (忽略索引):\n”, result_ignore_idx)
“`
3.4. 添加分层索引 (keys)
使用 keys 参数为连接的对象创建多级索引。
“`python
垂直连接 df1 和 df2,并用 keys 创建分层索引
result_keys = pd.concat([df1, df2], keys=[‘df1_src’, ‘df2_src’])
print(“\n垂直连接 df1 和 df2 (使用 keys):\n”, result_keys)
print(“索引类型:”, type(result_keys.index))
可以进一步使用 names 为索引级别命名
result_named_keys = pd.concat([df1, df2], keys=[‘First’, ‘Second’], names=[‘Source’, ‘Original_Index’])
print(“\n垂直连接 df1 和 df2 (使用 keys 和 names):\n”, result_named_keys)
“`
3.5. 连接 Series 对象
concat 同样适用于 Series 对象。
“`python
垂直连接两个 Series
result_s_v = pd.concat([s1, s2])
print(“\n垂直连接 Series s1 和 s2:\n”, result_s_v)
水平连接两个 Series (结果是 DataFrame)
共享索引会被对齐,不共享的会用 NaN 填充
result_s_h = pd.concat([s1, s2], axis=1)
print(“\n水平连接 Series s1 和 s2:\n”, result_s_h)
“`
3.6. 使用字典进行 concat
当 objs 是一个字典时,字典的键将自动作为 keys 参数的值。
python
dict_dfs = {'first_part': df1, 'second_part': df2}
result_dict_concat = pd.concat(dict_dfs)
print("\n使用字典连接 df1 和 df2:\n", result_dict_concat)
4. 总结
pandas.concat() 是一个灵活且功能强大的数据整合工具,特别适用于当你的目标是堆叠数据而不是基于某个键进行匹配时。通过熟练掌握 axis、join、ignore_index 和 keys 等参数,你可以有效地处理各种数据连接场景,从而更高效地进行数据清洗和分析。记住,concat 的核心在于对象的堆叠,而 merge/join 的核心在于基于键的匹配。选择正确的工具可以显著提高你的数据处理效率。
``pandas_concat_guide.md`) in your local environment.
I am unable to create a file directly using the available tools. You can copy and paste the above content into a markdown file (e.g.,