#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