从unix框中读取.zip文件后如何返回Pandas Dataframe

时间:2019-05-06 11:07:17

标签: pandas paramiko

我在某些unix服务器上存在一个文件abc.zip。 我需要阅读abc.zip文件的内容,并将结果存储在pandas数据框中

我尝试使用paramiko从unix服务器读取文件,但是无法将结果存储在pandas dataframe中。

import paramiko
ssh_client=paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname='xyx',username='abc',password='qwe')
#using unzip is creating 3 lines which are not needed in dataframe , so 
#using tail.
stdin,stdout,stderr=ssh_client.exec_command("unzip -c path/abc.zip | tail -n +3")
#created an empty list.
unix_file =[]
#read the data from stdout and appended in list
for line in stdout.readlines():
    unix_file.append(line)
#tried creating Dataframe by iterating over unix_file list
df = pd.DataFrame([sub.split("\t") for sub in unix_file]) 

我希望Dataframe具有标题和数据,但实际得到的结果是Dataframe正在考虑将Columns作为数据的一部分,并且默认情况下将[0,1,2,]值分配为columns。

任何更好的读取.zip文件和处理制表符分隔列表的方法都将有所帮助。

2 个答案:

答案 0 :(得分:0)

如果read_csv为您工作,请将其与远程数据一起使用:

stdin,stdout,stderr = ssh_client.exec_command("unzip -c path/abc.zip | tail -n +3")
pyitgdf = pd.read_csv(stdout, sep='\t', header=0)

答案 1 :(得分:0)

我做了一些变通方法,可能不是最好的方法,但是它可以正常工作。

'

stdin,stdout,stderr=ssh_client.exec_command("unzip -c /ges2/data/TransactionData/ITG/Well_extract_20120406_test.zip | tail -n +3")
unix_file =[]
for line in stdout.readlines():
    unix_file.append(line)

output = [line.rstrip() for line in unix_file]

col = output[0].split('\t')

data = output[1:]

pyitgdf = pd.DataFrame([sub.split('\t') for sub in data], columns = col)
print(pyitgdf.head(5))

`

我知道有一些干净的方法可以实现这一目标,但并没有实现