1

我需要读取 .DAT 或 .TXT 文件,提取列名并将它们分配给新名称并将数据写入熊猫数据框。

我有一个名为“filetype”的环境变量,根据它的值(DAT 或 TXT),我需要相应地读取文件并从中提取列名并分配给新的列名。

我的输入 .dat/.txt 文件只有 2 列,如下所示:

LN_ID,LN_DT

1234,10/01/2020

4567,10/01/2020

8888,10/01/2020

9999,10/01/2020

阅读上述文件并创建新列 new_loan_id=loan_id 和 new_ln_dt=ln_dt 并写入 pandas 数据帧

我尝试过使用类似下面的 pandas,但它给出了一些错误,我还想首先根据环境变量“filetype”的值检查 myfile 是 .dat 还是 .txt 并继续。

df=pd.read_csv('myfile.dat',sep=',')

new_cols=['new_ln_id','new_ln_dt']

df.columns=new_cols

我认为可能有一些更好更简单的方法。感谢是否有人可以提供帮助。谢谢!

4

1 回答 1

0

从您的问题中不清楚您是想要两个新的空列还是要替换现有名称。无论哪种方式,您都可以通过以下方式对 dte 执行此操作:

添加列

  LN_ID       LN_DT
0   1234  10/01/2020
1   4567  10/01/2020
2   8888  10/01/2020
3   9999  10/01/2020

定义新列

cols = ['new_ln_id','new_ln_dt']

和`

print(pd.concat([dte,pd.DataFrame(columns=cols)]))

这使

    LN_ID       LN_DT new_ln_id new_ln_dt
0  1234.0  10/01/2020       NaN       NaN
1  4567.0  10/01/2020       NaN       NaN
2  8888.0  10/01/2020       NaN       NaN
3  9999.0  10/01/2020       NaN       NaN

替换列名

df.rename(columns={"LN_ID": "new_ln_id", "LN_DT": "new_ln_dt"})

感谢您的回复,很抱歉造成混乱。我想重命名 2 列。但是,实际上,我想首先检查它是基于名为“filetype”的 unix 环境变量的 .dat 文件还是 .txt 文件。

例如:如果 filetype='TXT' 或 'DAT' 然后将输入文件说 'abc.dat' 或 'abc.txt' 读入新的 pandas 数据框并重命名 2 列。我希望这很清楚。

这就是我所做的。我创建了一个函数来检查文件类型是“dat”还是“txt”,并将文件读入 pandas 数据框,然后重命名 2 列。该函数正在加载数据,但没有根据需要重命名列。感谢有人能指出我错过了什么。

filetype=os.environ['TYPE']
print(filetype)
DAT

    def load(file_type):
        if file_type.lower()=="dat":
            df=pd.read_csv(input_file, sep=',',engine='python')
            if df.columns[0]=="LN_ID":
                df.columns[0]="new_ln_id"
            if df.columns[1]=="LN_DT":
                df.columns[1]="new_ln_dt"
            return(df)
        else:
            if file_type.lower()=="txt":
                df=pd.read_csv("infile",sep=",",engine='python')
                if df.columns[0]=="LN_ID":
                    df.columns[0]="new_ln_id"
                if df.columns[1]=="LN_DT":
                    df.columns[1]="new_ln_dt"
            return(df)
    
    load(filetype)

选择

from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir(path) if isfile(join(path, f))]
filename = os.path.join(path, onlyfiles[0])
if filename.endswith('.txt'):
    dte = pd.read_csv(filename, sep=",")
elif filename.endswith('.dat'):
    dte = pd.read_csv(filename, sep=",")
    
dte.rename(columns={"LN_ID": "new_ln_id", "LN_DT": "new_ln_dt"})
于 2021-03-13T08:42:13.060 回答