【问题标题】:How to remove the single quotation mark from every set of vector in the list variable?如何从列表变量中的每组向量中删除单引号?
【发布时间】:2021-11-02 23:20:30
【问题描述】:

我是这个网站的新手,我刚刚开始使用 Python 来执行我的项目。 当我通过从“txt”文件中附加许多向量集到变量“向量”中时,我遇到了这个输出。输出显示,在我完成附加后,“txt”文件中的每组向量上都有单引号。

我想删除变量列表中可以看到的每个单引号,同时保持列表中向量集的性质。我从这个网站上看到了很多好的解决方案,比如使用 .join()、split()、map() 等等。我已经尝试过了,但它没有给我想要的解决方案。

这是我的程序的代码

with open('output.txt', 'r') as result:
    df = pd.read_csv(result, header = None)
    grad = []
    vectors = []
    for row in range(len(df)):
        grad.append(df.iloc[row,0])
        for column in range(len(df.iloc[row,1:])):
            vectors.append(df.iloc[row,column+1])

变量“vectors”的输出如下:

In [30]:vectors
Out[30]: 
[' [-0.62338535 -0.62338535 -0.62338535 -0.62338535 -0.62338535]',
 ' [-0.6495707 -0.6495707 -0.6495707 -0.6495707 -0.6495707]',
 ' [-0.64999308 -0.64999308 -0.64999308 -0.64999308 -0.64999308]',
 ' [-0.64999989 -0.64999989 -0.64999989 -0.64999989 -0.64999989]',
 ' [-0.65 -0.65 -0.65 -0.65 -0.65]']

我理想的变量形式应该是这样的:

[[-0.62338535 -0.62338535 -0.62338535 -0.62338535 -0.62338535],
 [-0.6495707 -0.6495707 -0.6495707 -0.6495707 -0.6495707],
 [-0.64999308 -0.64999308 -0.64999308 -0.64999308 -0.64999308],
 [-0.64999989 -0.64999989 -0.64999989 -0.64999989 -0.64999989],
 [-0.65 -0.65 -0.65 -0.65 -0.65]]

这是“txt”文件中的内容。

7.379024325749306, [-0.62338535 -0.62338535 -0.62338535 -0.62338535 -0.62338535]
0.1190243257493061, [-0.6495707 -0.6495707 -0.6495707 -0.6495707 -0.6495707]
0.0019198730746340876, [-0.64999308 -0.64999308 -0.64999308 -0.64999308 -0.64999308]
3.0967725290674006e-05, [-0.64999989 -0.64999989 -0.64999989 -0.64999989 -0.64999989]
4.995121929499646e-07, [-0.65 -0.65 -0.65 -0.65 -0.65]

【问题讨论】:

  • 不看输入很难说
  • 您文件中的数据是什么样的?
  • 文本文件的每一行都包含一个值和一组向量。
  • 您的输入文件是文本(如可读,而不是二进制数据)。您没有从该文本表示形式转换为您想要的数字数据。
  • @mpez0 我应该如何将它存储在二进制数据中?我知道 with() 有二进制模式,只是不知道我应该如何转换它。

标签: python pandas list dataframe vector


【解决方案1】:

使用 NumPy 代替 Pandas:

vectors = []
with open('output.txt') as result:
    for line in result.readlines():
        vectors.append(np.fromstring(line.strip()[1:-1], sep=' '))
vectors = np.vstack(vectors)
>>> vectors
array([[-0.62338535, -0.62338535, -0.62338535, -0.62338535, -0.62338535],
       [-0.6495707 , -0.6495707 , -0.6495707 , -0.6495707 , -0.6495707 ],
       [-0.64999308, -0.64999308, -0.64999308, -0.64999308, -0.64999308],
       [-0.64999989, -0.64999989, -0.64999989, -0.64999989, -0.64999989],
       [-0.65      , -0.65      , -0.65      , -0.65      , -0.65      ]])

现在你有了一个真正的 NumPy 数组。

更新

我的“txt”文件实际上在每个向量集之前都有另一个值

vectors = []
values = []
with open('output.txt') as result:
    for line in result.readlines():
        value, vector = line.split(',', 1)
        values.append(float(value))
        vectors.append(np.fromstring(vector.strip()[1:-1], sep=' '))
values = np.array(values)
vectors = np.vstack(vectors)
>>> values
array([7.37902433e+00, 1.19024326e-01, 1.91987307e-03, 3.09677253e-05,
       4.99512193e-07])

>>> vectors
array([[-0.62338535, -0.62338535, -0.62338535, -0.62338535, -0.62338535],
       [-0.6495707 , -0.6495707 , -0.6495707 , -0.6495707 , -0.6495707 ],
       [-0.64999308, -0.64999308, -0.64999308, -0.64999308, -0.64999308],
       [-0.64999989, -0.64999989, -0.64999989, -0.64999989, -0.64999989],
       [-0.65      , -0.65      , -0.65      , -0.65      , -0.65      ]])

【讨论】:

  • 很抱歉,我没有在我的问题中提到 @Corralien,我的“txt”文件实际上在每个向量集之前都有另一个值。也许我应该先将值和向量分开?
  • @KevinChoonLiangYew。我更新了我的答案以考虑您的文件格式。请检查一下好吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-03
  • 2013-08-16
  • 2017-10-15
  • 2010-12-29
  • 1970-01-01
  • 2011-07-10
  • 2015-03-01
相关资源
最近更新 更多