繁体   English   中英

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

[英]How to separate one column into multiple columns in python?

我有一个“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

谢谢

首先通过read_csv创建 2 列DataFrame与分隔符:\\s+ for :带有一个或多个空格,然后将第二列转换为 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

如果将数据格式化为 JSON,则可以遍历对象并将所有字典项打印到一行中。 唯一的问题是使打印出来的文本间距正确; 排列成漂亮的一致列。

data = [
    {'Name':'Jai',
     'Age':25,
     'Address': 'N P IV',
     'Country': 'Canada'},
    {'Name' : 'Jack',
     'Age' : 18,
     'Address': 'T U W IX',
     'Country': 'USA'}
]

print("Name\tAge\tAddress\tCountry")

out=""

for adres in data:
    for x, y in adres.items():
        out=out+str(y)+"\t"
    print(out)
    out=""

脚本输出:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM