在python中基于外部列表/数据选择列

2024-04-24 15:34:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集,其中包含各种区域地图变量(大约1000个)。示例数据如下所示:

Userid   regionmap1 regionmap2 regionmap3      and so on.
 78       7           na         na
 45       na          na         na
 67       1           na         na

这里regionmap变量中的数字表示视图的数量。现在我有一个只有10个区域地图条目的外部文件。该文件包含10个条目/行,其中包含10个不同的区域映射变量:

Regionmap1
Regionmap3
Regionmap7
.....
.....
Regionmap856.

所以我的任务是在原始文件中只保留这些regionmap变量作为列,并删除所有其他990列。所以最终的数据应该是这样的:

Userid  Regionmap1 regionmap3 regionmap7   ........    regionmap856
78       7          na          na                       na
45       na         na          na                       na
67       1          na          na                       na

如果有人能在Python方面为我提供帮助,那就太好了。你知道吗


Tags: and文件数据区域示例soon地图
3条回答

试试dis!Dis代码是以标题为键,列值列表为值的字典

    f = open('2.txt', 'r') #opening the large file
    data = f.readlines()
    f.close()

    hdrs = data[0].split('\t') #assuming that large file is tab separated, and the first line is header line
    data_dict = {} #main data
    for each_line in data[1:]: #starting from second line as the first line is header line
        splitdata = each_line.split('\t') #splitting the line with tab
        for i, d in enumerate(splitdata): 
            tmpval = data_dict.get(hdrs[i], []) 
            tmpval.append(d)
            data_dict[hdrs[i]] = tmpval        #appending the column value for its respective header

    for k, v in data_dict.items(): #printing the final data dict
         print k, v

我有适合你问题的解决办法。 可以执行以下操作以使文件看起来更好。你知道吗

import StringIO
import numpy as np

# Preparing an object that simulates a file (f is the file)
f = StringIO.StringIO()
f.write("""Userid   regionmap1 regionmap2 regionmap3
  78       7           na         na
  45       na          na         na
  67       1           na         na""")
f.seek(0)

# Reading file and getting the header (1st line)
head = f.readline().strip("\n").split()
data = []
for a in f:
    data.append([float(e) for e in a.replace('na', 'NaN').split()])
#
data = np.array(data)

# Columns to keep
s = ("Regionmap1", "Regionmap3")
s = map(lambda e: e.lower(), s)
s = ["Userid",] + s

# Index of the columns to keep
idx, = np.where([e in s for e in head])

# Saving the new data in a file (simulated with StringIO)
ff = StringIO.StringIO()
ff.write(' '.join(tuple(s)) + '\n')
np.savetxt(ff, data[:, idx])

呈现的文件如下所示:

Userid regionmap1 regionmap3
7.800000000000000000e+01 7.000000000000000000e+00 nan
4.500000000000000000e+01 nan nan
6.700000000000000000e+01 1.000000000000000000e+00 nan

这很容易做到。你试过什么?你知道吗

以下是帮助您入门的一般步骤: 1-打开一个较小的文件和你想要保留的区域地图,并将它们重新排成一个列表。 2-打开较大的文件并创建包含数据的列表字典。您可以将dict键基本上看作列标题。这些值是表示所有记录的列值的列表。 3-现在,从dict中删除kvps,其中键不在步骤1的列表中,或者不是userid。 4-使用生成的dict写出一个新文件。你知道吗

当然不是唯一的方法,但这是一个简单的方法,你应该能够开始。希望有帮助:)

相关问题 更多 >