【发布时间】: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