Разделить последние две цифры строки

#python #pandas

#python #панды

Вопрос:

Я пытался разделить последние две цифры после запятой от остальной части строки, но безуспешно. Это файл csv. В строках с цифрами, заканчивающимися на 00, нет запятой, а в строках, кратных 10, отображается только одна цифра. Я думаю, что смогу обойти это, пока мне нужна помощь с разделением цифр после полной остановки от остальной части объекта.

 Values

2020-01-01,"00:00:00",1467.21

2020-01-01,"00:00:02",1467.28

2020-01-01,"00:00:04",1466

2020-01-01,"00:00:06",1467.06

2020-01-01,"00:00:08",1466.83  

2020-10-18,"19:55:04",3311.89

2020-10-18,"19:55:06",3313.03

2020-10-18,"19:55:08",3312.22

2020-10-18,"19:55:10",3312.29

2020-10-18,"19:55:12",3311.8  

Мне нужно было, чтобы они были

 Values 

21
28
00
06
83
89
03
22
29
08  

Я использовал этот код:

 import pandas as pd 
df= pd.read_csv('MESHS')

# dropping null value columns to avoid errors 
df.dropna(inplace = True) 
  
# new data frame with split value columns 
new = Values.str.split('. ', n = 1, expand = True) 

# making separate last name column from new data frame  
print(new[1])  

Ответ №1:

 import pandas as pd

df= pd.read_csv('MESHS')

# dropping null value columns to avoid errors 
df.dropna(inplace = True) 
  
# data frame with split value columns and fill NaN values
df[['Values','New_Value']] = df.Values.str.split('.', n=1, expand=True).fillna(0)

# If you no longer need the original column, you can delete it
#df.drop('Values', axis =1, inplace = True)

print(df)
  

Результат:

                        Values New_Value
0  2020-01-01,"00:00:00",1467        21
1  2020-01-01,"00:00:02",1467        28
2  2020-01-01,"00:00:04",1466        0
3  2020-01-01,"00:00:06",1467        06
  

Ответ №2:

Попробуйте это:

 df['Values'] = df['Values'].str.split('.').str[-1]
  

Комментарии:

1. 2020-01-01,"00:00:04",1466 выдает, 1466 что неверно

2. Я могу справиться с этим и создать условие для замены всех строк where len() ==4 на 00. В любом случае спасибо за ответ.

Ответ №3:

Приведенный ниже код поможет вам

во-первых, нужно разделить строковые значения на числовые

таким образом, мы можем получить правильные десятичные значения

затем разделить на основе оператора периода.

 df['numbers'] = pd.to_numeric(df["values"].str.split(",", n = 2, expand = True)[2])
df['values'] = df['numbers'].astype(str).str.split('.', n=1, expand = True)[1]
  

Вывод:

 21
28
 0
06
83
89
03
22
29
08