使用python进行数据修改:将字符串转换为行

时间:2017-07-12 11:00:03

标签: python data-science data-munging

我是python的新手,我需要执行一些数据修改。我想就这方面的最佳实践提出一些建议:库,模块,更好的实现代码,或者只是方向。

所以我的文本文件包含以下格式组织的数据:

A:100 B:200 C:300

A:150 B:350 C:370

即。每行代表相关数据,3个变量,名为A / B / C.每个新行显示有关相同变量但与另一个对象相关的数据。

所以我的数据在文本文件中,我想以下列格式输出:

100 '\t' 150

200 '\t' 350

300 '\t' 370

即。变量A,B和C的数据行列表,这样我就可以导出到图形工具包(可能是Origin Pro)。

这是我到目前为止提出的代码:

with open("example.txt", 'r') as file:
    for line in file.readlines():
        line = line.replace(' ', '\n')
        line = line.split(':',  1)[-1]
        print line

这会将数据转换为以下内容:

100
B:200
C:300

150
B:350
C:370

由于.split()显然仅在使用.replace()在数据之间添加新行之前在每一行上执行。我觉得在使用.replace()之后,我需要再次开始循环来执行.split()甚至只是迭代地行[2:],以删除主要变量名称 - 但后来我想不到我将如何为每一行创建数据列表以创建列?

有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:0)

显然,您需要一些数据结构来保存变量的值。最合适的是列表字典:

d = {'A': [], 'B': [], 'C': []}

然后,您浏览文件,将每一行拆分为“名称:值”项,然后在:符号上拆分这些项并显示存储值:

with open("example.txt", 'r') as file:
    for line in file:
        elements = line.rstrip().split()
        for e in elements:
            (name, value) = e.split(':')
            d[name].append(value)

最后输出数据,每行一个变量:

for k in sorted(d):
    print('\t'.join(d[k]))

答案 1 :(得分:0)

我建议使用pandas库:

import pandas as pd

df = pd.read_csv(path_to_infile, sep=' ', header=None, names=['A', 'B', 'C'])
df = df.applymap(lambda x: int(x[2:]))
df.to_csv(path_to_outfile, sep='\t', header=False, index=False)

import pandas之后,您可以使用read_csv函数将文件加载到数据框中,并添加一些其他参数:

  • sep用于声明分隔符
  • header可用于表示您没有列名称
  • names用于为列分配名称

之后,您可以在整个数据框架上使用applymap函数来删除变量名称和冒号。

最后,您可以使用to_csv方法将文件保存到所需位置,同样没有header,但这次没有index,因为它会默认添加索引列。

如您所见,您可以再次使用sep参数声明新的分隔符。

答案 2 :(得分:0)

你可以使用pandas来实现它,这非常简单:

import pandas as pd

df = pd.read_csv(file_path,sep=' ',header=None,names = ['A','B','C'])
output = df.apply(lambda x:x[.str.replace('^([A-Z]:)','')],axis=1).T
output.to_csv(file_path,sep='\t',header = False, index = False)

文件:

pandas.apply

pandas.read_csv

pandas.to_csv