У меня есть словарь фреймов данных, и каждый фрейм данных содержит текст и числа в виде строк.< /p>

Из-за разнообразие с точки зрения чисел, я хочу отформатировать свои фреймы данных, чтобы они были более удобными для пользователя, например: 1 M (миллион) вместо 1 000 000
Я также хочу добавить условное форматирование, изменяя цвет выходного текста в зависимости от значения: например, зеленый, если ['P/E'] < 25.
Здесь я застрял:
- < li>Если я изменю числовой формат перед добавлением цветов (условное_форматирование), я не смогу добавить стиль к своим значениям из-за «строкового» формата (я думаю)
< /li> - Если я добавлю цвета перед изменением числового формата, я застряну в Pandas Styler, TypeError: объект «Styler» не подлежит подписке; цвет будет правильным, но значения будут отображаться как 20.040102030 вместо 20.04
Ваша помощь будет оценена по достоинству!
def apply_conditional_formatting(df, column_rules):
styled_df = df.style
# Example: Apply green text if P/E < 25
if 'P/E' in df.columns:
df['P/E'] = pd.to_numeric(df['P/E'], errors='coerce')
styled_df = styled_df.map(
lambda val: 'color: green' if isinstance(val, (int, float)) and val < 25 else '',
subset=['P/E']
)
if 'Market Cap' in df.columns:
df['Market Cap'] = pd.to_numeric(df['Market Cap'], errors='coerce')
styled_df = styled_df.map(
lambda val: 'color: green' if isinstance(val, (int, float)) and val > 1000000 else '',
subset=['Market Cap']
)
# Extend the logic to other rules here...
return styled_df
def apply_formatting_to_dataframes(dataframes, column_rules):
# Apply conditional formatting to a dictionary of DataFrames.
styled_dataframes = {}
for section, df in dataframes.items():
styled_dataframes[section] = apply_conditional_formatting(df, column_rules)
return styled_dataframes
def convert_to_readable(num):
if num is None or num == 'N/A':
return 'N/A'
if isinstance(num, str):
try:
num = float(num) # Try converting strings to float
except ValueError:
return num
if num >= 1_000_000_000 or num = 1_000_000 or num = 1_000 or num
Подробнее здесь: https://stackoverflow.com/questions/790 ... lors-and-n