Изменить окончательное решение
После некоторой очистки выясняется, что столбец decode
сохраняется в виде строки "[(1,1),(2,3),(4,4),(1,3)]"
, которую сначала необходимо преобразовать в список кортежей. , После преобразования с пониманием плотного списка преобразование LineString работает так, как предполагается:
df['decode'] = [eval(ele) for ele in df.decode.str.strip()[:]]
df['decode'] = df.apply(lambda x: linestringdecode(x[1], x[4]), axis=1)
Альтернатива Другой вариант go об этом - исправить импорт. Путем преобразования строки непосредственно в список кортежей напрямую с помощью ast.literal_eval
, как предлагается в этом SO Вопрос
import ast
df = pd.read_csv("Test_Csv_With_List.csv", quotechar='"', sep=",",converters={4:ast.literal_eval})
Перед правкой: Я попытался воспроизвести вашу ошибку с кодом ниже. Тем не менее, он прекрасно работает без ошибок.
from shapely.geometry import LineString
import pandas as pd
def linestringdecode(name, decode):
try:
return LineString(decode)
except:
print(name)
return np.nan
data = {'Unamed 0': [0,1],
'name': ['test','test2'],
'rote': ['Gibberish','moreGib'],
'decode': [[(-105.27983, 40.06008), (-105.27984, 40.05827)],[(-23, 23), (-22, 24)]]}
df = pd.DataFrame(data)
# print(df)
df['decode'] = df.apply(lambda x: linestringdecode(x[1], x[3]), axis=1)
Из вашего сообщения об ошибке AttributeError: 'str'
Я думаю, что могу вывести, что что-то не так с импортом ваших данных. Я предполагаю, что декодирование имеет объект dtype, а не список.
Пожалуйста, подтвердите , что переданный аргумент decode
функции linestringdecode()
имеет тип списка, а не строку.