#python #linux #pandas
#python #linux #pandas
Вопрос:
Я пытаюсь написать запрос pandas для строкового литерала байта. Это нормально работает в Windows, но я получаю исключение в Red Hat Ent. Linux. Вот код:
import pandas as pd
df = pd.DataFrame([[1, 2, b'3'], [4, 5, b'6'], [7, 8, b'9']],
columns=['num1', 'num2', 'byteStr'])
print(df)
print()
df_qnum = df.query("num1 == 1")
print(df_qnum)
print()
df_qstr = df.query("byteStr == b'6'")
print(df_qstr)
Результаты Windows:
num1 num2 byteStr
0 1 2 b'3'
1 4 5 b'6'
2 7 8 b'9'
num1 num2 byteStr
0 1 2 b'3'
num1 num2 byteStr
1 4 5 b'6'
Результаты Linux:
num1 num2 byteStr
0 1 2 b'3'
1 4 5 b'6'
2 7 8 b'9'
num1 num2 byteStr
0 1 2 b'3'
Traceback (most recent call last):
File "pandasTest.py", line 10, in <module>
df_qstr = df.query("byteStr == b'6'")
File "/usr/local/lib64/python3.6/site-packages/pandas/core/frame.py", line 3231, in query
res = self.eval(expr, **kwargs)
...
File "/usr/local/lib64/python3.6/site-packages/pandas/core/computation/expr.py", line 374, in visit
visitor = getattr(self, method)
AttributeError: 'PandasExprVisitor' object has no attribute 'visit_Bytes'
Как я могу заставить этот запрос работать в Linux? Пробовал на Python3 и Pandas 1.0.1 и 1.1.4.
Ответ №1:
Вы всегда можете декодировать byte objects
до буквальных строк, а затем query
, например:
In [4516]: df.byteStr = df.byteStr.str.decode("utf-8")
In [4517]: df
Out[4517]:
num1 num2 byteStr
0 1 2 3
1 4 5 6
2 7 8 9
In [4519]: df.query("byteStr == '6'")
Out[4519]:
num1 num2 byteStr
1 4 5 6
Комментарии:
1. Я бы хотел избежать преобразования, поскольку оно выполняется для широкого спектра файлов HDF5, а некоторые наборы данных довольно большие, и для запуска требуется некоторое время. В идеале я могу просто запросить как есть. Мне нужно будет провести несколько экспериментов, чтобы увидеть, какое влияние оказывает общее решение.