【问题标题】:How can I manipulate Dataframe - Python我如何操作数据框 - Python
【发布时间】:2021-12-22 09:02:36
【问题描述】:

我正在阅读一些 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']

我试图通过替换()来解决它,但它不起作用: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)

任何想法,我如何在没有 ' ' 的情况下获得这些值?

谢谢大家。

【问题讨论】:

  • 这些值是否来自同一列?还是来自两组不同的列?本质上,您要问的是您希望它们是 int 数据类型,而不是 stringfloat,那么为什么不将类型转换为 int
  • 是的,这些值来自两列,在本例中来自两个数据框,我将它们转换为列表,然后创建一个包含所有值的列表,因为我必须进行比较。我无法将它们转换为 int,因为我也得到了一些单词,而不仅仅是数字。

标签: python dataframe csv data-manipulation


【解决方案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]

【讨论】:

  • 他要求去掉每个字符串周围的 ' '。
  • @ImSo3K,非常感谢。现在代码在将列表元素转换为 int 值后更新
  • 感谢@AziMez 的回答,但我无法将它们转换为 int,因为我也得到了一些单词,而不仅仅是数字。
  • @BrunoLorena,所以,您可以使用 isdigit 方法仅将像 '100002111020' 这样的数字转换为正确的格式 100002111020。但是保留其他包含 string 格式的单词的值并带有引号 ' '这就是你要找的吗?
  • 好的@AziMez,不幸的是我有很多值,不仅仅是数字:s
猜你喜欢
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 2019-01-05
相关资源
最近更新 更多