在从循环中读取第一列后,将.txt文件附加到数据框中填充NaN



很抱歉问了一个很常见的问题。我没有在这个论坛上找到这个问题的重复。

我正在阅读一些.txt文件,每个文件只包含1列值,我创建了一个更大的数据框架来存储它们并处理所有。下面是我的代码的大致样子:

dataPath=os.path.join(os.getcwd(), Project)
data=pd.DataFrame()
for filename in os.listdir(dataPath):
if filename.endswith((".txt")):
columnName=os.path.basename(filename)
df = pd.read_csv(os.path.join(dataPath,filename), index_col=None,header=0,names=[columnName],dtype=float)
data=data.append(df)

因此,您可以看到我正在读取一些文件,将新列命名为filename,并为每个循环附加新帧。当我这样做时,输出是:

Alphas.txt  Betas.txt  ...  Thetas.txt  TimeSteps.txt
0       13.08        NaN  ...         NaN            NaN
1      -11.68        NaN  ...         NaN            NaN
2      -26.42        NaN  ...         NaN            NaN
3       57.71        NaN  ...         NaN            NaN
4      -53.81        NaN  ...         NaN            NaN
[5 rows x 6 columns]

但是这些文件是填充的,不应该是NaN。当我在循环中打印df时,它们都显示为数据帧,例如,打印theta得到

Thetas.txt
0         -5.90
1         47.74
2         -7.67
3         77.31
4         18.51
..          ...
112       10.80
113        8.03
114      -56.47
115       -8.46
116      -35.35
[117 rows x 1 columns]

所以我希望最终的data数据帧完全填充正确的值,而不是NaN。我怀疑我没有传递正确的数据类型,所以我试图在读取.txt文件时指定它。我不知道该怎么做。任何帮助都将非常感激。我应该用concat还是merge呢?

为什么不试试:

dataPath=os.path.join(os.getcwd(), Project)
data=pd.DataFrame()
for filename in os.listdir(dataPath):
if filename.endswith((".txt")):
columnName=os.path.basename(filename)
df = pd.read_csv(os.path.join(dataPath,filename), index_col=None,header=0,names=[columnName],dtype=float)
data[columnName] = df[columnName]

然后现在打印data将得到预期的结果。

最新更新