Проблема в том, что вы не передаете float
на format
, вы передаете ему Series
.(A Series
с dtype=float
возможно, но все же Series
.) Нет способа отформатировать Series
как одно число, потому что это целая куча чисел, поэтому ваш код не работает.
Если вам интересно, почему вы получаете эту конкретную ошибку: слегка упрощенная версия такова, что для любого объекта без __format__
метода Python делает obj.__str__().__format__(formatspec)
.Таким образом, Series
преобразуется в строку, которую затем пытается отформатировать как число с плавающей точкой.
Если вы хотите отформатировать каждое значение в Series
, а не вSeries
в целом, вам нужно сделать это явно.Например, вы можете использовать map
или apply
(используя метод str.format
, связанный со строкой "${:,.0f}"
в качестве функции):
print(df_final.sum_funded.map("${:,.0f}".format))
… или зацикливать элементы:
for elem in df_final.sum_funded:
print("${:,.0f}".format(elem)
С такими операторами, как +
, и методами для объектов Pandas (и Numpy / Scipy), и функциями, которые выходят из Pandas (или Numpy или Scipy), вещи обычно просто работают как магия -если вы даете им одно значение, они работают с одним значением;если вы дадите им Series, DataFrame или массив, они будут работать с каждым элементом.И если вы напишите свою собственную функцию, которая ничего не делает, кроме операторов и функций и методов Pandas, она тоже работает как волшебство.
Но с функциями и методами, которые не происходят из Pandas (илиNumpy или Scipy) и попробуйте сделать что-нибудь, кроме операторов и функций Pandas, например str.format
, этого не происходит.Они не были написаны, чтобы работать поэлементно, и у Панд не было возможности автоматически их зацепить.Итак, если вы хотите отобразить их по всей Серии (и т. Д.), Вы должны явно попросить об этом.
Это то, что Панды 'map
и apply
и аналогичные методы для.Или вы можете пойти другим путем и использовать Numpy vectorize
, чтобы превратить обычную немую функцию Python в поэлементную функцию Numpy / Pandas.Или вы можете просто зациклить вручную.Но дело в том, что вам нужно сделать что-то .