我的数据框中有一个列,其值为'3.456B',实际上代表了3.456亿(和Million相似的表示法).如何将此字符串形式转换为正确的数字表示?
这显示了数据框:
import pandas as pd
data_csv = pd.read_csv('https://biz.yahoo.com/p/csv/422conameu.csv')
data_csv
Run Code Online (Sandbox Code Playgroud)
这是一个示例值:
data_csv['Market Cap'][0]
type(data_csv['Market Cap'][0])
Run Code Online (Sandbox Code Playgroud)
我试过这个:
data_csv.loc[data_csv['Market Cap'].str.contains('B'), 'Market Cap'] = data_csv['Market Cap'].str.replace('B', '').astype(float).fillna(0.0)
data_csv
Run Code Online (Sandbox Code Playgroud)
但不幸的是,最后还有值为'M'的值,表示百万.它返回错误如下:
ValueError: invalid literal for float(): 6.46M
Run Code Online (Sandbox Code Playgroud)
如何在此列中用适当的值替换B和M?有没有更好的方法呢?
我在熊猫数据框中有几列。基于每一列,我需要创建一个新列。此功能有效:
def f(row):
if row['col_1'] == 0:
val = 'Neutral'
elif row['col_1'] > 0:
val = 'Growth'
else:
val = 'Contraction'
return val
df['New_Col_1'] = df.apply(f(row) , axis=1)
Run Code Online (Sandbox Code Playgroud)
但是由于我有几个要比较的列(col_2、col_3 等),我想将列的名称作为函数中的参数传递。
def f(row,col_name):
if row[col_name] == 0:
val = 'Neutral'
elif row[col_name] > 0:
val = 'Growth'
else:
val = 'Contraction'
return val
df['New_Col_1'] = df.apply(f(row,'col_1') , axis=1)
Run Code Online (Sandbox Code Playgroud)
但是,有一个错误。它说未定义参数“行”。我如何克服这个问题?
我正在使用 openpyxl 提取 Excel 电子表格的最后一行:
import openpyxl
wb = openpyxl.load_workbook('Folder/File.xlsx')
sheet = wb.active
last_row = sheet.max_row
Run Code Online (Sandbox Code Playgroud)
这返回了 44 sheet.max_row。但电子表格的最后几行没有任何值,它们是空白的。
type(sheet['A44'].value)返回NoneType。
我想提取最后一行(本例中为第 37 行)中的值并将其附加到 Pandas 数据框中。如何忽略NoneType电子表格最后一行中的值?