Home > Blockchain >  Convert text into dataframe
Convert text into dataframe

Time:11-03

I have been given some data in a text format that I would like to convert into a dataframe:

text <- "
VALUE Ethnic
1 = 'White - British'
2 = 'White - Irish'
9 = 'White - Other'
;
"

I'm looking to convert into a dataframe with a column for the first number and a column for the test in the string. So - in this case, it would be two columns and three rows.

CodePudding user response:

library(tidyr)
library(dplyr)
tibble(text = trimws(text)) %>% 
  separate_rows(text, sep = "\n") %>%
  filter(text != ";") %>% 
  slice(-1) %>% 
  separate(text, into = c("VALUE", "Ethnic"), sep = "\\s =\\s ")

-output

# A tibble: 3 × 2
  VALUE Ethnic           
  <chr> <chr>            
1 1     'White - British'
2 2     'White - Irish'  
3 9     'White - Other'  

Or in base R

read.table(text = gsub("=", " ", trimws(text, 
  whitespace = "\n(;\n)*"), fixed = TRUE), header = TRUE)
  VALUE          Ethnic
1     1 White - British
2     2   White - Irish
3     9   White - Other

CodePudding user response:

create the years list

years_list = list(range(1986,2020))

defines the columns separation specified in the layout

columns_width = [(0,2),(2,10),(10,12),(12,24),(24,27),(27,39),(39,49),(49,52),(52,56),(56,69),(69,82), (82,95),(95,108),(108,121),(121,134),(134,147),(147,152),(152,170),(170,188),(188,201), (201,202),(202,210),(210,217),(217,230),(230,242),(242,245)]

defines the english transleted columns according to the layout

columns_header = ['Register Type','Trading Date','BDI Code','Negociation Code','Market Type','Trade Name', 'Specification','Forward Market Term In Days','Currency','Opening Price','Max. Price', 'Min. Price','Mean Price','Last Trade Price','Best Purshase Order Price', 'Best Purshase Sale Price','Numbor Of Trades','Number Of Traded Stocks', 'Volume Of Traded Stocks','Price For Options Market Or Secondary Term Market', 'Price Corrections For Options Market Or Secondary Term Market', 'Due Date For Options Market Or Secondary Term Market','Factor Of Paper Quotatuion', 'Points In Price For Options Market Referenced In Dollar Or Secondary Term', 'ISIN Or Intern Code ','Distribution Number']

create a empty df that will be filled during the iteration below

years_concat = pd.DataFrame()

iterate all years

for year in years_list:

time_serie = pd.read_fwf('/kaggle/input/bmfbovespas-time-series-19862019/COTAHIST_A' str(year) '.txt', 
                     header=None, colspecs=columns_width)

# delete the first and the last lines containing identifiers
# use two comented lines below to see them
# output = pd.DataFrame(np.array([time_serie.iloc[0],time_serie.iloc[-1]]))
# output
time_serie = time_serie.drop(time_serie.index[0])
time_serie = time_serie.drop(time_serie.index[-1])
years_concat = pd.concat([years_concat,time_serie],ignore_index=True)

years_concat.columns = columns_header

  • Related