pandas将DataFrame的几列数据合并成为一列

 更新时间:2022年02月08日 10:14:32   作者:Yale曼陀罗  
本文主要介绍了pandas将DataFrame的几列数据合并成为一列,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

1.1 方法归纳

  • 使用 + 直接将多列合并为一列(合并列较少);
  • 使用pandas.Series.str.cat方法,将多列合并为一列(合并列较多);

范例如下:

dataframe["newColumn"] = dataframe["age"].map(str) + dataframe["phone"] + dataframe["address”]
#或者
dataframe["newColumn"] = dataframe["age"].map(str).str.cat([dataframe["phone"],dataframe["address”]],sep='-',na_rep='?')

注意事项:

  • 参与合并的列的数据类型必须为str类型,int和float等数值类型需先转化为str;
  • 参与合并的列的长度必须相同(即:行数),否则报错,但使用pandas.Series.str.cat方法,可通过指定参数join={‘left’, ‘right’, ‘outer’, ‘inner’},实现长度不相等的列合并;
  • 参与合并的列的各行元素均不为NaN,否则,只要有一列的对应行元素为NaN,则合并结果中该行将为NaN,但使用pandas.Series.str.cat方法,可通过指定参数na_rep='-',将各列中缺失行元素填充为‘-’,从而保留合并列的所有行元素;

1.2 .str.cat函数详解

1.2.1 语法格式:

# pandas.Series.str.cat语法如下:
Series.str.cat(others=None, sep=None, na_rep=None, join=None)

1.2.2 参数说明:

others : 准备合并的字符串列表,其数据类型可以为:Series, Index, DataFrame, np.ndarrary(N元数组) or list-like(类似列表)

备注: 由于默认join=None,所以欲合并的两个(多个)字符串列表必须具有相同的长度,否则需设置参数join= {‘left’, ‘right’, ‘outer’, ‘inner’},来控制多个字符串列表的合并方式。

(1)如果others=None(即:字符串列表df[col_1]不与其他字符串列表合并),结果将不传递其他值,而是将df[col_1]的所有值都连接成一个字符串;(详见范例1-1)

(2)如果others≠None(即:指定了与字符串列表df[col_1]合并的其他字符串列表df[col_2]),结果将用分隔符把df[col_1]与df[col_2]对应的行值连接在一起, 返回Series。(详见范例1-2)

sep:合并结果中不同元素/列之间的分隔符。默认情况下,使用空字符串’ ’ 。
na_rep:为所有缺失值插入的内容,其数据类型可以为:str或None,默认na_rep=None

备注:

(1)如果na_rep=None,则多个合并列中只要有一列的对应行元素为NaN,合并结果中该行元素将为NaN;
(2)如果na_rep=‘str’(str需自定义),则合并列中各缺失行元素将被填充为‘str’,合并结果将保留合并列的所有行元素;

join :确定连接方式,其可能的取值为:{‘left’, ‘right’, ‘outer’, ‘inner’},默认join=None

1.2.3 核心功能:

  • 将Series中的多个字符串[‘a’, ‘b’, ‘c’]拼接为一个字符串’a b c’(字符串拼接)
  • 将DataFrame中的两(多)列df[col_1]和df[col_2]合并为一列(多列合并)

备注: pandas.Series.str.cat仅适用于str类型的数据,int和float等数值型需先转化为str型,才可调用此方法。
int型转为str的方法:

1、df[‘Price’]=df[‘Price’].map(lambda x: str(x))
2、df[‘Price’]=df[‘Price’].map(str)
3、df[‘Price’]=df[‘Price’].astype(‘str’)

若要同时将多列合并为一列,需引入列表list来指定准备合并的列,例如:

df[col_1].str.cat([df[col_2],df[col_3],df[col_4]],sep='-')

1.2.4 常见范例:

import numpy as np
import pandas as pd
#创建原始数据
s=pd.Series(['a','b',np.nan,'d'])
>>>
s
0      a
1      b
2    NaN
3      d
# other=None时,调用s.str.cat(),可将series转为用分隔符sep分隔的字符串,缺失项将被省略
s1=s.str.cat(sep=' ')
>>>
s1
'a b d'
# other=None时,指定na_rep='?',结果将保留原series中的缺失项,并用?代替
s2=s.str.cat(sep=' ',na_rep='?')
>>>
s2
'a b ? d'
# other≠None时,调用s.str.cat(),可将两个字符串列表df[col_1]与df[col_2]合并为一列,结果用分隔符sep分隔各项元素,由于默认na_rep=None,故合并时若df[col_1]与df[col_2]的对应行元素有一个为NaN,则合并后该行元素值将为None,结果返回Series
s3=s.str.cat(['A','B','C','D'],sep=',')
>>>
s3
0    a,A
1    b,B
2    NaN
3    d,D
#  other≠None时,调用s.str.cat(),可将两个字符串列表df[col_1]与df[col_2]合并为一列,指定na_rep='-',故合并结果将保留df[col_1]与df[col_2]的所有行,且将df[col_1]与df[col_2]的缺失项填充为‘-'
s4=s.str.cat(['A','B','C','D'],sep=',',na_rep='-')
>>>
s4
0    a,A
1    b,B
2    -,C
3    d,D
# 欲合并的字符串列表df[col_1]与df[col_2]的索引不同时,需指定参数join,确定连接方式
t=pd.Series(['d','a','e','c'],index=[3,0,4,2])
s_1=s.str.cat(t,join='left',na_rep='-')
>>>
s_1
0    aa
1    b-
2    -c
3    dd
s_2=s.str.cat(t,join='outer',na_rep='-')
>>>
s_2
0    aa
1    b-
2    -c
3    dd
4    -e
s_3=s.str.cat(t,join='inner',na_rep='-')
>>>
s_3
0    aa
2    -c
3    dd
s_4=s.str.cat(t,join='right',na_rep='-')
>>>
s_4
3    dd
0    aa
4    -e
2    -c

到此这篇关于pandas将DataFrame的几列数据合并成为一列的文章就介绍到这了,更多相关pandas DataFrame列合并内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python数组处理之最值与下标问题

    python数组处理之最值与下标问题

    这篇文章主要介绍了python数组处理之最值与下标问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • python对批量WAV音频进行等长分割的方法实现

    python对批量WAV音频进行等长分割的方法实现

    这篇文章主要介绍了python对批量WAV音频进行等长分割的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • django 扩展user用户字段inlines方式

    django 扩展user用户字段inlines方式

    这篇文章主要介绍了django 扩展user用户字段inlines方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 浅谈python多线程和多线程变量共享问题介绍

    浅谈python多线程和多线程变量共享问题介绍

    这篇文章主要介绍了浅谈python多线程和多线程变量共享问题介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Pycharm远程连接服务器跑代码的实现

    Pycharm远程连接服务器跑代码的实现

    本文主要介绍了Pycharm远程连接服务器跑代码的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Python实现解析命令行参数的常见方法总结

    Python实现解析命令行参数的常见方法总结

    除ide的执行方式外,命令行的方式执行Python脚本是参数化程序执行的一种常见且简单的方法。本文总结了三个常见的获取和解析命令行参数的方法,需要的可以参考一下
    2022-10-10
  • python多线程使用方法实例详解

    python多线程使用方法实例详解

    这篇文章主要介绍了python多线程使用方法,结合实例形式详细分析了Python多线程thread模块、锁机制相关使用技巧与操作注意事项,需要的朋友可以参考下
    2019-12-12
  • Python解方程组 scipy.optimize.fsolve()函数如何求解带有循环求和的方程式

    Python解方程组 scipy.optimize.fsolve()函数如何求解带有循环求和的方程式

    这篇文章主要介绍了Python解方程组 scipy.optimize.fsolve()函数如何求解带有循环求和的方程式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Python机器学习算法库scikit-learn学习之决策树实现方法详解

    Python机器学习算法库scikit-learn学习之决策树实现方法详解

    这篇文章主要介绍了Python机器学习算法库scikit-learn学习之决策树实现方法,结合实例形式分析了决策树算法的原理及使用sklearn库实现决策树的相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Python面向对象编程之类的概念

    Python面向对象编程之类的概念

    这篇文章主要介绍了Python面向对象编程之类的概念,Python语言的中所有数据类型都是对象、函数是对象、模块是对象;所有类都是继承最基础的类object,面向对象编程又叫OOP,下文了解更多具体内容,需要的朋友可以参考一下
    2021-11-11

最新评论