Как вернуть Pandas Dataframe после чтения .zip файла из unix box - PullRequest
2 голосов
/ 06 мая 2019

У меня есть файл abc.zip, присутствующий на каком-то Unix-сервере. Мне нужно прочитать содержимое файла abc.zip и сохранить результат в pandas dataframe

Я попытался прочитать файл с сервера Unix, используя paramiko, но не смог сохранить результат в кадре данных pandas.

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 содержит заголовок и данные, но фактическое значение o / p, которое я получил, это то, что Dataframe рассматривает столбцы как часть данных и по умолчанию присваивает значения [0,1,2,] как столбцы.

Любой лучший способ прочитать файл .zip и обработать разделенный табуляцией список был бы полезен.

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Я сделал несколько обходных путей, возможно, это не лучший способ, но он работает.

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))

`

Я знаю, что есть какой-то чистый способ добиться этого, но не получить его

0 голосов
/ 06 мая 2019

Если 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)
...