【问题标题】:How to create a dataframe column with repeated string value?如何创建具有重复字符串值的数据框列?
【发布时间】:2016-02-22 15:44:52
【问题描述】:

我正在从一堆文件中读取数据并将其存储在数据框中。我想要数据框的一列来指示数据来自哪个文件。如何在不手动输入的情况下创建一个重复重复相同字符串的列?

我正在读取的每个文件都有大约 100 个数据点(但每次的数量不一样)。当我阅读每一个时,我将沿着轴 = 0 连接到数据框。它应该是这样的。

import numpy as np
import pandas as pd
numbers = np.random.randn(5) # this data could be of any length, ~100
labels = np.array(['file01','file01','file01','file01','file01']) 
tf = pd.DataFrame()
tf['labels'] = labels
tf['numbers'] = numbers

In [8]: tf
Out[8]: 
   labels   numbers
0  file01 -0.176737
1  file01 -1.243871
2  file01  0.154886
3  file01  0.236653
4  file01 -0.195053

(是的,我知道我可以将 'file01' 设为列标题并沿轴 = 1 附加每个标题,但有一些原因我不想这样做。)

【问题讨论】:

  • IIUC 你可以只做tf['labels'] = 'file01' 标量值将沿df的短轴广播,除了你为什么要这样做,似乎有点浪费或者你只想确定数据来自哪里?您可以将 dfs 加载到 df 中,设置 labels 列,将这些附加到可以调用 pd.concat(list_of_dfs) 的列表中
  • 当我做tf['labels'] = 'file01'时,所有标签都显示为NaN
  • 你需要一个已经填充行的df,如果你的df是空的,那么做分配不会扩展df,无论如何你可以做tf = pd.DataFrame({'labels':labels, 'numbers':numbers'})
  • 是的,我只是想确定数据的来源。我最初是通过让每个文件都有自己的列来做到这一点的,但这真的很难看,因为所有这些NaNs 的数据集长度不同,然后我想向每个文件添加更多列,这很混乱.我认为纵向连接会更干净。
  • 为什么不直接用文件名作为键,dfs 作为值来填充字典?

标签: python string pandas dataframe


【解决方案1】:

你去,你的代码是固定的!您实际上可以在 DataFrame 构造函数中使用的 dict 中放置一个值:)。

import numpy as np
import pandas as pd
filename = 'file01'
numbers = np.random.randn(5) # this data could be of any length, ~100
tf = pd.DataFrame({'labels': filename , 'numbers': numbers})

In [8]: tf
Out[8]: 
   labels   numbers
0  file01 -0.176737
1  file01 -1.243871
2  file01  0.154886
3  file01  0.236653
4  file01 -0.195053

【讨论】:

  • 谢谢!!我知道这一定很简单,但我仍然试图围绕所有这些语法进行思考。
  • 构造函数非常强大,但我知道 pandas 的学习曲线很陡峭。你完成了他们的 10 分钟教程吗?
  • pandas 是否会实际使用单独存储每个 file01 所需的内存量,或者是否有某种内置的模式识别可以确保 file01 只存储一次然后引用所有单元格都到同一个内存位置?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-25
  • 2022-12-28
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 2021-08-18
  • 2020-03-14
相关资源
最近更新 更多