对于Python中的DataFrame,有时候我们需要将一列数据拆分成多列,或者将一行数据拆成多行,这在数据清洗和处理过程中十分常见。下面就是详细讲解“Python DataFrame一列拆成多列以及一行拆成多行”的完整攻略。
一列拆成多列
方法一:使用split函数
在DataFrame中,我们可以使用Pandas库提供的split函数实现将一列数据按照指定的分隔符拆分成多列的目的。
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'name': ['Alice,Bob', 'Charlie,David,Eve']})
# 使用split函数拆分列
df[['name1', 'name2', 'name3']] = df['name'].str.split(',', expand=True)
在上述代码中,我们首先创建了一个包含name列的DataFrame。然后,使用split函数将该列数据按照逗号分隔并拆分为多列,同时使用expand参数设置为True,表示将拆分后的多列重新赋值给DataFrame中的三列name1、name2、name3。
方法二:使用DataFrame的apply函数
如果我们拆分后的列数不确定,也可以使用apply函数来实现。
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'name': ['Alice,Bob', 'Charlie,David,Eve']})
# 使用apply函数拆分列
df[['name'+str(i) for i in range(1, df['name'].apply(lambda x: len(x.split(','))).max()+1)]] = df['name'].str.split(',', expand=True)
相对于split函数,该方法使用了apply函数和lambda表达式,可以动态地创建拆分后的列。同时,我们使用了max方法找到拆分后的列的数量,这样可以确保我们创建了足够的列用于储存拆分后的数据。
一行拆成多行
方法一:使用stack函数
除了将一列拆分为多列,我们还可以使用stack函数将一行数据拆分为多行。
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'name': ['Alice', 'Bob'], 'hobbies': ['reading,singing', 'swimming,running']})
# 使用stack函数拆分行
df2 = df.set_index('name')['hobbies'].str.split(',', expand=True).stack().reset_index(level=1, drop=True).to_frame('hobbies').reset_index()
在上述代码中,我们首先创建了一个包含name和hobbies两列数据的DataFrame。然后,我们使用set_index方法将name列设置为索引,这样就可以将一行数据拆分为多行。接着,使用stack函数将每个hobby放在一个单独的行中,并重新设置index列,最终得到拆分后的DataFrame。
方法二:使用explode函数
从Pandas版本0.25开始,我们还可以使用explode函数拆分行。
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({'name': ['Alice', 'Bob'], 'hobbies': [['reading', 'singing'], ['swimming', 'running']]})
# 使用explode函数拆分行
df2 = df.explode('hobbies')
在上述代码中,我们首先创建了一个包含name和hobbies两列数据的DataFrame,其中hobbies列的数据是列表类型。然后,使用explode函数将列表类型的hobbies列拆分为多行,并重新组成一个新的DataFrame。
总而言之,在Python中,通过使用split函数、apply函数、stack函数和explode函数等方法,我们可以轻松地将DataFrame中的一列数据拆分为多列,或者将一行数据拆分为多行。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python DataFrame一列拆成多列以及一行拆成多行 - Python技术站