Python使用空格sep从csv读取数据,第一列除外

Python使用空格sep从csv读取数据,第一列除外,python,pandas,dataframe,Python,Pandas,Dataframe,您好,我想知道是否有一种方法可以使用pandas read_csv从csv文件中读取数据,除了第一列之外,每个条目都用空格分隔: Alabama 400 300 200 New York 400 200 100 Missouri 400 200 50 District of Columbia 450 100 250 因此将有4列,第一列是state。与不在数据中的分隔符一起使用,如|,然后与参数n=3一起使用,以便从右侧按3个空格进行拆分,expand=True用于DataFrame: imp

您好,我想知道是否有一种方法可以使用pandas read_csv从csv文件中读取数据,除了第一列之外,每个条目都用空格分隔:

Alabama 400 300 200
New York 400 200 100
Missouri 400 200 50
District of Columbia 450 100 250
因此将有4列,第一列是state。

与不在数据中的分隔符一起使用,如
|
,然后与参数
n=3
一起使用,以便从右侧按3个空格进行拆分,
expand=True
用于
DataFrame

import pandas as pd

temp=u"""Alabama 400 300 200
New York 400 200 100
Missouri 400 200 50
District of Columbia 450 100 250"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep="|", names=['Data'])

print (df)
                               Data
0               Alabama 400 300 200
1              New York 400 200 100
2               Missouri 400 200 50
3  District of Columbia 450 100 250


df = df['Data'].str.rsplit(n=3, expand=True)
print (df)

                      0    1    2    3
0               Alabama  400  300  200
1              New York  400  200  100
2              Missouri  400  200   50
3  District of Columbia  450  100  250

您还可以使用正则表达式来拆分字符串

import regex as re
r = re.compile("([\w\s]+)\s+([\d]+)\s+([\d]+)\s+([\d]+)")
data = r.match('New York 400 200 100')
split_list = [data.group(1),data.group(2),data.group(3),data.group(4)]
输出将是:
[‘纽约’、‘400’、‘200’、‘100’]


您只需创建列表的最终列表并将其写入csv文件。

原始数据是什么样子的?这是个问题