python - 如何在Python中将一列分成多列?

标签 python python-3.x pandas

我有一个“csv”文件,如下所示:

样本数据:

    Name : Jai
    Age : 25
    Address: N P IV 
    Country: 
    Name : Jack
    Age : 18
    Address: T U W IX 
    Country: USA

我想把这一列分成多列,就像这样, 预期结果:

    Name        Age        Address        Country
    Jai         25          N P IV         NA
    Jack        18          T U W IX       USA

谢谢

最佳答案

首先创建 2 列 DataFrame by read_csv使用分隔符 :\s+ 表示 : 并带有一个或多个空格,然后将第二列转换为 numpy 数组并重新整形为 4 'columns',创建DataFrame 通过构造函数将第一列的前 4 个值转换为新列名称,最后(如果需要)将 Age 列转换为整数:

import pandas as pd
import numpy as np

temp=u"""Name : Jai
Age : 25
Address: N P IV 
Country: 
Name : Jack
Age : 18
Address: T U W IX 
Country: USA"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep=":\s+", names=['col1','col2'])

print (df)
       col1      col2
0     Name        Jai
1      Age         25
2   Address    N P IV
3  Country:      None
4     Name       Jack
5      Age         18
6   Address  T U W IX
7   Country       USA

c = df['col1'].iloc[:4].str.strip(' :')
#pandas 0.24+
df = pd.DataFrame(df['col2'].to_numpy().reshape(-1, 4), columns=c).rename_axis(None, axis=1)
#pandas below 0.24
#df = pd.DataFrame(df['col2'].values.reshape(-1, 4), columns=c).rename_axis(None, axis=1)

df['Age'] = df['Age'].astype(int)
print (df)
   Name  Age   Address Country
0   Jai   25    N P IV    None
1  Jack   18  T U W IX     USA

关于python - 如何在Python中将一列分成多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56896663/

相关文章:

python - 我应该在包中包含非 Python 文件吗?

python - 在 Python 3.6.5 中打印 Unicode 字符

python - 在 Ubuntu 上安装 tweepy

python - 相当于 try/except/finally 语句

python - 根据列中的值获取第一行和最后一行数据框组

python - 具有自定义路径的 Pip、Git 和 ssh key

python - Pytorch 中的 LSTM : how to add/change sequence length dimension?

python - 在 model.fit() 期间记录 Keras 中每个时期的计算时间

python - 将 Excel 表转换为有组织的 Pandas Dataframe

python - Pandas:根据日期范围和 ID 在 Dataframe 中添加金额