如何操作 Dataframe - Python

How can I manipulate Dataframe - Python

提问人:Bruno Lorena 提问时间:11/10/2021 最后编辑:Bruno Lorena 更新时间:11/10/2021 访问量:39

问:

我正在阅读一些 csv 文件,不幸的是,我得到的值带有 ' ' 或以 .0 结尾的值 我想知道是否可以将其从 DataFrame 中删除?

这些是我得到的数据:

['100002134511', '100002087058', '100002087114', '100002087082', '100002087074', '100002087072', '100002087070', '100002087068', '100002087148', '100002087149', '100002087151', 'ESZ1', 'NQZ1', 'IKZ1', 'OEZ1', 'UBZ1', 'G Z1', 'FVZ1', 'BTSZ1', 'TYZ1', 'JBZ1', 'OATZ1', 'DUZ1', 'UXYZ1', 'YMZ1', 'L M4', 'EDU3', 'SFIH3', 'L H3', 'EDH6', 'EDZ4', 'EDZ5', 'EDZ1', 'L U3', 'EDU4', 'SFIU1', 'EDH3', 'EDU5', 'EDM2', 'EDH4', 'EDZ3', 'EDM5', 'L H2', 'L M3', 'EDH2', 'EDM6', 'SFIM4', 'L M5', 'SFIZ3', 'EDM3', 'ERH2', 'L M2', 'L U4', 'EDZ2', 'L Z3', 'L U2', 'SFIH4', 'L H4', 'ERM2', 'EDH5', 'SFIZ2', 'EDU2', 'SFIH2', 'L Z2', 'L H5', 'EDM4', 'SFIZ1', 'SFIU2', 'SFIM3', 'ERH3', 'EDU6', 'L Z1', 'SFIU3', 'ERU2', 'L U5', 'SFIU4', 'L Z4', 'ERU3', 'ERZ1', 'SFIM2', 'ERV1', 'EDZ6', 'EDH7', 'ERM3', 'ERM4', 'ERH4', 'ERZ3', 'ERZ2', 'ERU4']

我试图通过做一个replace()来解决它,但它没有用:s

# Drop any blank fields and duplicates
nan_value = float("NaN")
df_position.replace("", nan_value, inplace=True)
df_position.dropna(subset=["SecurityReference"], inplace=True)
df_position.drop_duplicates(subset=["SecurityReference"], inplace=True)

df_tradeCash.replace("", nan_value, inplace=True)
df_tradeCash.dropna(subset=["MurexSecurityReference"], inplace=True)
df_tradeCash.drop_duplicates(subset=["MurexSecurityReference"], inplace=True)

# Get values
tradePositionList = df_position["SecurityReference"].tolist()  # 34076
tradeCashList = df_tradeCash["MurexSecurityReference"].tolist()  # 35777
securitylist = tradePositionList + tradeCashList

# remove .0 and ''
str_list = [str(i).replace(".0", "") for i in securitylist if i != ""]
new_list = [str(i).replace('', "") for i in str_list]
print(new_list)

任何想法,如果没有 ' ' ,我怎么能得到这些值?

谢谢大家。

Python DataFrame CSV 数据操作

评论

0赞 ImSo3K 11/10/2021
这些值是否来自同一列?还是来自两组不同的列?从本质上讲,你要问的是,你希望它们的数据类型,而不是 或 ,那么为什么不将类型转换为 ?intstringfloatint
0赞 Bruno Lorena 11/10/2021
是的,这些值来自两列,在本例中来自我转换为列表的两个数据帧,然后创建了一个包含所有值的列表,因为这样我必须进行比较。我无法将它们转换为 int,因为我也得到了一些单词,而不仅仅是数字。

答:

0赞 AziMez 11/10/2021 #1

试这个

lst=['100002111020','', '100002114960', '100002118038', '100002118341', '100002118723', '100002124056', '100002124472', '100002125623', '100002132063', '100002133259', '100002140470', '100002142166', '100002145213', '100002145655', '100002147566', '100002147568', '100002149569', '100002149570', '100002153436', '100002155722', '100002156059', '100002156610', '100002160798', '100002167870', '100002167871', '100002172281', '100002173832', '100002173833', '100002173834', '100002175111', '100002178288', 100001385479.0, 100001419963.0, 100001465490.0, 100001475101.0, 100001481123.0, 100001499246.0, 100001519126.0, 100001526718.0, 100001540507.0, 100001547351.0]

#Convert list element to string then truncate '.0' and remove any empty elements.
str_list=[str(i).replace('.0','') for i in lst if i !='']

# Then convert list element to int values
int_list=[int(i) for i in str_list]

print(int_list)

[输出]

   [100002111020, 100002114960, 100002118038, 100002118341, 100002118723, 100002124056, 100002124472, 100002125623, 100002132063, 100002133259, 100002140470, 100002142166, 100002145213, 100002145655, 100002147566, 100002147568, 100002149569, 100002149570, 100002153436, 100002155722, 100002156059, 100002156610, 100002160798, 100002167870, 100002167871, 100002172281, 100002173832, 100002173833, 100002173834, 100002175111, 100002178288, 100001385479, 100001419963, 100001465490, 100001475101, 100001481123, 100001499246, 100001519126, 100001526718, 100001540507, 100001547351]

评论

0赞 ImSo3K 11/10/2021
他要求去掉每根弦周围的“”。
1赞 AziMez 11/10/2021
@ImSo3K,非常感谢。现在,将列表元素转换为 int 值后,代码将更新
0赞 Bruno Lorena 11/10/2021
感谢您的回答@AziMez但我无法将它们转换为 int,因为我也得到了一些单词,而不仅仅是数字。
0赞 AziMez 11/10/2021
@BrunoLorena,因此,您可以使用 isdigit 方法仅将像这样的数字“100002111020”转换为正确的格式100002111020。但是,将包含字符串格式的单词与引号“”的其他人值联系起来。这就是你要找的吗?
0赞 Bruno Lorena 11/10/2021
好吧,@AziMez,不幸的是,我在许多值中都有“ ',而不仅仅是数字:s