python - 文件名(来自多个文件)作为一个数据框中的列名

标签 python pandas

我有很多文本文件只有一列数据,不同的数据类型(float64,日期),里面没有标题。
我正在尝试编写代码:
- 获取所有不带扩展名的文件名 -> 创建一个列表(这有效!)
- 读取一个目录中的所有文件并将它们连接到一个具有一个数字索引的数据框中。

我的代码:

filelist = os.listdir(path)                             #Make a file list
file_names=[os.path.splitext(x)[0] for x in filelist]   #Remove file extension

试过这个(第一个选项):

df_list = [pd.read_table(file) for file in filelist]
df = pd.concat(df_list,ignore_index=True)

...但是我从 6 个文件中得到了 3 列数据完全困惑。

也试过这个(第二个选项):

df=pd.DataFrame(columns=file_names)

for file in filelist:
    frame=pd.read_csv(file)
    df=df.append(frame, ignore_index=True)

...这也行不通。

如有任何建议,我们将不胜感激。

输入
在 Q*.txt 文件的开头只有零(大约 100 个值),此后显示数字。

Q1.txt   Q2.txt   T21     T22
  0       0      51.06    77.46
  0       0      50.32    77.33
  0       0      50.90    77.45

当我运行“第一个选项”时,我得到:

 filelist
 >>>['Q1.txt', 'Q2.txt','T21.txt', 'T22.txt']     
 file_names
 >>>['Q1', 'Q2','T21', 'T22']
 df.dtypes
 >>>0        object
 >>>51.06    object
 >>>77.46    object
 >>>dtype: object

输出文件

    0  51.06 77.46
 0  0       
 1  0       
 2  0       

看起来前 2 个文件(开头为零的文件)在一列中。第二个和第三个是文件 T21 和 T22 的第一个值。

感谢@Viktor Kerkez,我已将 header=None 添加到 pd.read_table 中,现在所有文件都在一列中,dtype=object。
如何将所有文件拆分为多列?

最佳答案

你可以做接下来的事情:

import os
import pandas as pd

file_names = []
data_frames = []
for filename in os.listdir(path):
    name = os.path.splitext(filename)[0]
    file_names.append(name)
    df = pd.read_csv(filename, header=None)
    df.rename(columns={0: name}, inplace=True)
    data_frames.append(df)

combined = pd.concat(data_frames, axis=1)

这里我重命名了每个 DataFrame 列以匹配文件名,您可以省略该步骤,只需使用 ignore_index=True

关于python - 文件名(来自多个文件)作为一个数据框中的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18275699/

相关文章:

python - mpi4py:动态数据处理

python - Django small bytestrings on model,建模应该使用什么类型?

python - .loc 在 Pandas 中运行缓慢

python - 在每个循环中酸洗和加载 pandas 数据框以保存进度……坏主意?

python - 使用第一列作为索引的 Excel 到 Pandas DataFrame

python - 属性错误: module 'wikipedia' has no attribute 'summary'

python - 画中画 (Python) : ImportError: cannot import name _remove_dead_weakref

python - Mac OS 10.6.2 Snow Leopard 上的 Django + MySQL

python-3.x - 聚合后如何有条件地对不同列的值求和?

python - 查找两个 pandas 数据帧之间部分字符串匹配的最快方法