for i in time:
data = change_data(i)
Ну ты перезаписываешь свои данные да и все. То есть в data у тебя остается последний результат вызова функции для последнего i. benz_df['time'] = data
колонке time, значение data. Он его броадкастит на всю колонку да и все. Ты ожидаешь что data это массив c данными, а это одно значение. data= []
for i in time:
data.append(change_data(i))
benz = pd.read_xml(benz_xml_file, xpath='.//filling')
benz_df = pd.DataFrame(benz)
benz_df['time'] = benz_df['time'].apply(change_data)
benz_df['time'][:50]
df = df.dropna()
Ну на всякий случай проверь после этой строчки df.isnull().sum()
Должны быть нули, далее там же проверь не попало ли строковое значение (df == 'NaN').sum()
df = df.where(df['area_name'].apply(lambda x: x in used_cities))
появляется NaN, что собственно логично, ты предоставляешь , булевый массив True, False. где pandas оставит оригинальное значение где состояние True и заменит на твое (которое ты не предоставил) где значение False. То есть вторым параметром ты должен был предоставить значение, (по умолчанию оно NaN). df = df.where(df['area_name'].apply(lambda x: x in used_cities), 'Твое значение')
df = pd.DataFrame({
'tank_value':tank
})
В принципе все. Но это плохой способ, правильно вообще не процессировать данные python циклами и читать весь json в фрейм и потом делать выборку из него. dfs = []
for filename in fileanmes:
df = pd.read_excel(filename)
dfs.append(df)
from functools import reduce
import numpy as np
df1 = pd.DataFrame({
'A':[1],
'B':[2]
})
df2 = pd.DataFrame({
'A':[1],
'C':[2]
})
df3 = pd.DataFrame({
'A':[1],
'D':[2]
})
dfs_column_names = [df1.columns, df2.columns, df3.columns]
print(reduce(np.intersect1d, dfs_column_names))
Вот так ты можешь найти общие колонки у любого количества фреймов.pd.concat(dfs).
Где dfs это список фреймов, с едиными колонками. То есть предварительно, ты как я показал нашел common_columns. и затеам dfs=[df[common_columns] for df in dfs].
И затем конкатенируешь. df = pd.read_csv('directory2.csv').set_index('Имя', drop=False).rename_axis('_Имя', axis=0)
что бы у нас колонка имя не пропадала, и меняем имя у индекса, что бы он отличался от имени колонки. df.to_csv('directory2.csv', index=False)
bad_rounding_result = pivot_table_type_of_expenses.iloc[6, 1]
df1 = pd.DataFrame({'A':[bad_rounding_result]})
print(df1)
print(df1.iloc[0,0])
В df1 оно будет нормально, будешь доставать будет вот такое. Если тебе надо после вычеслений рапортовать это где то ну отформатируй его строкой да и все. import chardet
with open(filename, 'rb') as rawdata:
result = chardet.detect(rawdata.read(100000))
result
d1 = {'A':1,'B':2}
d2 = {'A':3,'B':4}
df = pd.DataFrame.from_records([d1,d2])
собирашь в список словари и по этом передаешь методу from_records. Это вместо concat. Если хочется работать с concat. То при каждой итерации ты создаешь отдельный фрейм с данными и одинаковыми колонками, собираешь эти фреймы в список и потом concat будет прекрасно работать например. dfs = []
for i in range(3):
df = pd.DataFrame({
'A':np.random.randn(4),
'B':np.random.choice(['green','blue','white'], 4)
})
dfs.append(df)
final_df = pd.concat(dfs,ignore_index=True)
import pandas as pd
import numpy as np
df = pd.DataFrame({
'temperature':[
1.5,1,4,-2,1,-1,-1,4,3,2,1,-2,-3,-4,-5,-6,-1,2,-2,-2,-3,4,-5,-3,3,1,2,5,3,2
]
}, index = pd.date_range('2023-01-01', periods=30))
negative_groups = (
df
.query('temperature < 0')
.groupby((df.temperature > 0).cumsum())
)
positive_groups = (
df
.query('temperature >= 0')
.groupby((df.temperature < 0).cumsum())
)
start_date = [value for value in negative_groups.groups.values() if len(value) >=5][0][4]
end_date = [value for value in positive_groups.groups.values() if len(value) >=5][0][4]
df.loc[start_date:end_date]
cat = pd.Categorical(df['Шифр дисциплины'].str.split('.').str[0],
categories=['ОГСЭ','ЕН','ОПЦ','МДК','УП','ПМ','ПП'])
print(df
.groupby(cat)
.apply(lambda x: x.sort_values('Шифр дисциплины', key = lambda x: x.str.split('.').str[1]))
.reset_index(drop=True)
)
cat = pd.Categorical(df['Шифр дисциплины'].str.split('.').str[0],
categories=['ОГСЭ','ЕН','ОПЦ','МДК','УП','ПМ','ПП'])
df.sort_values(by=['Шифр дисциплины'],key= lambda x: cat)
Результат будет, как у тебя только кода меньше и без всяких созданий временных колонок.def write(df, xl_writer, startrow = 0,**kwargs):
df.drop(df.index).to_excel(xl_writer, startrow = startrow,**kwargs)
df.to_excel(xl_writer, startrow = startrow + 1,header = False,**kwargs)
writer = pd.ExcelWriter("test_only_removed_empty_row.xlsx",engine='xlsxwriter')
write(df, writer, sheet_name = 'Лист1')
writer.close()
def write(df, xl_writer, startrow = 0,startcol=0,**kwargs):
df.drop(df.index).to_excel(xl_writer, startrow = startrow,startcol=startcol,**kwargs)
df.droplevel(0,axis=1).to_excel(xl_writer, startrow = startrow + 2, startcol=startcol+1,header = False,index=False,**kwargs)
writer = pd.ExcelWriter("bad_practice.xlsx",engine='xlsxwriter')
write(df, writer, sheet_name = 'Лист1')
writer.close()
import pandas as pd
import numpy as np
pd.DataFrame(np.where(dataframe_1 != dataframe_2, 'Ваше значение',dataframe_1), columns = dataframe_1.columns)
import pandas as pd
import numpy as np
pd.DataFrame(np.where(dataframe_1 != dataframe_2, dataframe_2,dataframe_1), columns = dataframe_1.columns)
import pandas as pd
import numpy as np
songs = {
'ANNA ASTI': ['Девочка танцуй','Грустный дэнс','Гармония'],
'Три дня дождя': ['Демоны','Где ты','Перезаряжай'],
'MACAN': ['Кино','Пополам','Бенз'],
}
NUMBER_OF_DAYS = 3
LENGTH_OF_FINAL_FRAME = sum(len(value) for value in (songs.values())) * NUMBER_OF_DAYS
dates = pd.date_range('2023-01-01', periods=NUMBER_OF_DAYS, freq='1D')
artists = []
for key, value in songs.items():
artists += [key] * len(value)
dates_and_artists = []
for date in dates:
for artist in artists:
dates_and_artists.append((date,artist))
songs_arr = np.array(list(songs.values()) * NUMBER_OF_DAYS).reshape(-1,1)
data = np.concatenate([np.array(dates_and_artists),
songs_arr,
np.random.randint(3000,1_000_000,LENGTH_OF_FINAL_FRAME).reshape(-1,1)], axis=1)
df = pd.DataFrame(data=data, columns=['Date','Artist','Track','Start'])
df
from itertools import chain
import pandas as pd
import numpy as np
songs = {
'ANNA ASTI': ['Девочка танцуй','Грустный дэнс','Гармония'],
'Три дня дождя': ['Демоны','Где ты','Перезаряжай'],
'MACAN': ['Кино','Пополам','Бенз'],
}
NUMBER_OF_DAYS = 3
NUMBER_OF_SONGS_PER_DAY = sum(len(value) for value in (songs.values()))
STARTING_DATE = '2023-01-01'
dates = pd.date_range(STARTING_DATE, periods=NUMBER_OF_DAYS, freq='1D')
artists = list(chain(*[[key] * len(value) for key, value in songs.items()]))
songs_per_day = list(chain(*songs.values()))
index = pd.MultiIndex.from_product([dates,artists],names=['Date','Artist'])
df = pd.DataFrame({
'Songs':songs_per_day * NUMBER_OF_DAYS,
'Start':np.random.randint(3000,1000000,NUMBER_OF_DAYS * NUMBER_OF_SONGS_PER_DAY),
}, index=index).reset_index()
df
df = pd.DataFrame({
'urls':['123.ru','lalala.ru','lalala.ru/qwe','lalala.ru/12rwse','bebe.ru'],
'other data':[1,1,1,1,1]
})
# Первый способ
new_df = df.loc[df['urls'].str.split('/').str[0].drop_duplicates().index]
print(new_df)
# Второй способ
new_df = df[~df['urls'].str.contains('/')].drop_duplicates()
print(new_df)
df = pd.DataFrame({
'urls':['http://123.ru/','http://lalala.ru','http://lalala.ru/qwe',
'http://lalala.ru/12rwse','http://bebe.ru'],
'other data':[1,1,1,1,1]
})
new_df = df.loc[df['urls'].str.split('//').str[1].str.split('/').str[0].drop_duplicates().index]
print(new_df)
shapka = {'Кадастровый № ОКС':[],'Вид ОКС':[],'Назначение':[],'Адрес ОКС':[],'Площадь':[],'Вид права':[],'ФИО':[],'Номер рег. записи':[]}
df = pd.DataFrame(shapka)
slovar = {'Кадастровый № ОКС': 'тут текст', 'Вид ОКС': 'тут текст', 'Назначение': 'тут текст', 'Адрес ОКС': 'тут текст', 'Площадь': 'тут текст', 'Вид права': 'тут текст', 'ФИО': 'тут текст', 'Номер рег. записи': 'тут текст'}
new_df = pd.concat([df, pd.DataFrame.from_records([slovar])] ,ignore_index=True)
d1 = {'A':1,'B':2}
d2 = {'A':3,'B':4}
df = pd.DataFrame.from_records([d1,d2])
print(df)
metrics_df[[
"same_intervals_between_requests"
df[["time_local", "id_session"]].groupby("id_session").apply(count_metric_using_shift)
df = pd.DataFrame({
'Cat':['A','A','B','A','B'],
'Num1':[1,2,3,4,5],
'Num2':[6,7,8,9,10]
})
df[['A','B']] = df[['Cat']].groupby('Cat').apply('mean')
df= pd.DataFrame({'time':pd.date_range('2023-03-22', periods=48, freq='H')})
bins = [0,5,11,16,22,24]
labels = ['Ночь', 'Утро','День','Вечер','Ночь']
df['session'] = pd.cut(df['time'].dt.hour, bins=bins, labels=labels, include_lowest=True,ordered=False)
df